Привет, народ!! Могу ли я спросить, как получить значение возврата vbscipt для автоматизации в любом месте? - PullRequest
1 голос
/ 02 декабря 2019

Вот пример кода, над которым я пытаюсь работать. Он выдает код ошибки 1025. Я пытаюсь найти что-то, что может решить эту проблему, но безуспешно в поиске полезного комментария. Я просто хочу вернуть значение "num3" для автоматизации в любом месте. Я не уверен, что использую правильную командную строку для возврата значения (WScript.StdOut.Write)? Если я использую неправильную команду, пожалуйста, научите меня или укажите ссылку, где я могу узнать командную строку записи. заранее спасибо:)

Dim num1, num2, num3 As Integer

Private Sub Form_Load()

num1 = 2
num2 = 5
num3 = num1 + num2


WScript.StdOut.Write(num3) ' Is this the right command ?

End Sub

Ответы [ 3 ]

5 голосов
/ 02 декабря 2019

Вам необходимо добавить ссылку на библиотеку типов Windows Script Host Object Model в меню Project->References..., затем сохранить файлы проекта .vbp, открыть их в Блокноте и добавить в конце следующие две строки:

[VBCompiler]
LinkSwitches=/SUBSYSTEM:CONSOLE

Сохраните файл .vbp и заново откройте проект в VB6 IDE и вставьте следующий код в Form1:

Option Explicit

Private StdOut                  As TextStream

Dim num1, num2, num3 As Integer

Private Sub Form_Load()
    With New FileSystemObject
        Set StdOut = .GetStandardStream(1)
    End With

    num1 = 2
    num2 = 5
    num3 = num1 + num2

    StdOut.WriteLine num3
End Sub

Скомпилируйте проект в Project1.exe и запустите его из командной строки, чтобы получить что-товот так в консоли:

C:> Project1.exe
7

. ,,и затем отображается Form1, поэтому приложение не будет немедленно завершено.

Попробуйте поместить свой код в Sub Main в стандартный модуль .bas без форм для действительно консольного приложения VB6.

Ниже представлен почтовый индекс проекта: StdOutTest.zip

1 голос
/ 03 декабря 2019

Вопрос немного двусмысленный, но я постараюсь ответить на него как можно лучше

Если вы хотите вывести число (код выхода)

Просто сделайте это,

' https://social.msdn.microsoft.com/Forums/sqlserver/en-US/d6e76731-8e3b-465f-9d5a-12c6498d6b6c/how-to-return-exit-code-from-vb6-form?forum=winforms
Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
' (then in some function)
ExitProcess 666666 ' whatever number to output to the other process

Если вы хотите вывести на StdOut (консоль)

Nirsoft screenshot

Это немного сложнее. VB6 изначально не предназначен для такой работы. Тем не менее, есть едва известный обходной путь. Изначально разработанный Nirsoft, которому удалось сделать невозможное , я модифицировал и немного оптимизировал (по иронии судьбы, для использования CLI) их код, который теперь доступен в моем репо . Вот как его развернуть.

  1. Клонируйте репозиторий,
  2. Скопируйте CLI.bas в свой проект, затем добавьте CLI.bas в свой проект. Теперь вы можете использовать функции CLI. Например
CLI.setup ' required line, to set up variables
CLI.send "some text -> "
CLI.SetTextColour CLI.FOREGROUND_RED OR CLI.FOREGROUND_GREEN OR CLI.FOREGROUND_INTENSITY ' for Orange and Intensive text, need to use OR, not AND
CLI.sendln "Orange foobar!"
CLI.sendln "maybe another line, why not?"
Теперь вы можете использовать эти функции, если ваш код. Обязательно сначала наберите CLI.setup. Я бы рекомендовал в первый раз, просто протестируйте функциональность в Form1_Load() Скомпилируйте свой исполняемый файл с помощью пакета VB6, но это не такконец истории Ваше скомпилированное приложение должно быть исправлено для работы в режиме командной строки. Для этого CD в AMC_patcher-CLI папку, которую вы вызвали и выполните

amc "C:/Projects/My supa CLI project/Project1.exe" 3

, где "C:/Projects/My supa CLI project/Project1.exe" - путь к вашему приложению. EXE

В качестве альтернативы для шага исправления используйте оригинальную реализацию Nirsoft GUI Patcher . Это менее масштабируемо, но так же крепко

0 голосов
/ 02 декабря 2019

В дополнение к приведенным ответам, пожалуйста, обратите внимание, что ...

Dim num1, num2, num3 As Integer

... фактически означает (за исключением случаев, когда оператор Defxxx используется в другом месте и здесь опущен)

Dim num1 As Variant
Dim num2 As Variant
Dim num3 As Integer

... что, вероятно, не то, что вы думаете, что означает.

...