2015-04-04 3 views
-4

Во-первых, я довольно новичок на языке VB, скриптах VB и программировании VB.net, но хорош на других языках и платформах.Ошибка синтаксиса с AddHandler в VBScript

Моя цель - запустить простую программу на основе VB из командной строки и вызвать всплывающее окно с сообщением (эта часть я понял). Кроме того, я хочу, чтобы окно сообщения (а также сценарий) прекращалось, если компьютер переходит в спящий режим (или, если он возобновляет его), в среднем.

Я нашел этот код на VBForums о обработчике:

'add the handlers for the system standby, resume, and shutdown 
AddHandler Microsoft.Win32.SystemEvents.PowerModeChanged, AddressOf PowerModeChanged 
AddHandler Microsoft.Win32.SystemEvents.SessionEnding, AddressOf SessionEnding 

[...] 

Private Sub PowerModeChanged(ByVal sender As System.Object, _ 
ByVal e As Microsoft.Win32.PowerModeChangedEventArgs) 
    Select Case e.Mode 
     Case Microsoft.Win32.PowerModes.Resume 
      'windows is resuming from sleep 
     Case Microsoft.Win32.PowerModes.Suspend 
      'goodnite windows 
    End Select 
End Sub 

Private Sub SessionEnding(ByVal sender As System.Object, _ 
ByVal e As Microsoft.Win32.SessionEndingEventArgs) 
    Select Case e.Reason 
     Case Microsoft.Win32.SessionEndReasons.Logoff 
      'logoff 
     Case Microsoft.Win32.SessionEndReasons.SystemShutdown 
      'shutdown 
    End Select 
End Sub 

Так что я сделал .vbs файл, который использует выше (первый вариант) и побежал:

Sub PowerModeChanged(ByVal sender As System.Object, _ 
    ByVal e As Microsoft.Win32.PowerModeChangedEventArgs) 
    Select Case e.Mode 
     Case Microsoft.Win32.PowerModes.Resume 
      'windows is resuming from sleep 
      WScript.Quit 
     Case Microsoft.Win32.PowerModes.Suspend 
      'goodnite windows 
      WScript.Quit 
    End Select 
End Sub 

Sub Main() 
    Set objArgs = WScript.Arguments 
    msgText = objArgs(0) 
    AddHandler Microsoft.Win32.SystemEvents.PowerModeChanged, AddressOf PowerModeChanged 
    MsgBox msgText 
End Sub 

Main() 

Но я получили всевозможные синтаксические ошибки (по As, AddressOf и т. д.). После некоторых тестов и поиска в Google я понял, что некоторые объекты VB кажутся более строгими и имеют более развитый синтаксис, чем другие. Так вот моя вторая версия, которая почти удается пройти фазу синтаксиса:

Sub PowerModeChanged(sender, e) 
    Select Case e.Mode 
     Case Microsoft.Win32.PowerModes.Resume 
      'windows is resuming from sleep 
      WScript.Quit 
     Case Microsoft.Win32.PowerModes.Suspend 
      'goodnite windows 
      WScript.Quit 
    End Select 
End Sub 

Sub Main() 
    Set objArgs = WScript.Arguments 
    msgText = objArgs(0) 
    AddHandler Microsoft.Win32.SystemEvents.PowerModeChanged, PowerModeChanged 
    MsgBox msgText 
End Sub 

Main() 

Теперь переводчик жалуется на «Require:" Microsoft»на AddHandler линии. На данный момент я не знаю, что делать. Я пробовал Microsoft.AddHandler, но не работал.

Так что я был бы признателен, если бы вы могли помочь мне исправить эту строку и сказать мне, есть ли какая-нибудь другая вещь, которая могла бы заставить эту маленькую программу работать.

спасибо.

+0

'Итак, я сделал файл .vbs' - сделал с чем? У вас на самом деле установлена ​​Visual Studio? – GSerg

+0

На самом деле не нужна IDE для написания кода в файле. Грубо оно помогает для средних и крупных проектов. В моем случае я использую блокнот ++, потому что он имеет несколько строк. –

+0

Перефразировано: я бы сказал, что на самом деле не нужна IDE для записи кода в файл, если интерпретатор/компилятор не выводит недостаточно информации об ошибках (что, по-видимому, здесь). В моем случае я использовал notepad ++, потому что он имеет несколько строк, но теперь я рассматриваю возможность переключения на IDE. –

ответ

0

На благе всех тех, кто новичок в VB, VB.net и VBScript плавильного тигля, я понял, что есть столько, сколько различия между VB (.net) и VBScript, как есть сходство , Не говоря уже о том, что ошибки во время выполнения, возникающие при запуске ошибочных VBScripts, в основном не дают подсказки для решения реальных проблем.

Мое намерение состояло в том, чтобы запустить простую программу в Basic, но я закончил смешивание VB (.net) и VBScript. Жаль тем, кто пытался следить за мной.

Что касается AddHandler, кажется, я не могу вызвать эту функцию в VBScript, поэтому мне нужно было записать ее в VB (.net); таким образом, файл .vbs не является решением.

В конце концов я установил VS (Visual Studio) и скомпилировал и выполнил мою программу. Источники VB имеют расширение .vb и выводят исполняемый файл после компиляции. VS предлагает много мгновенных завершений при кодировании, которые помогают писать код с первого раза. Вопреки тому, что я думал и прокомментировал, даже для упрощенных базовых программ, рекомендуется иметь VS (версия Express ничего не стоит).

Я считаю, что альтернатива VS соответствует Trigger.

Снова извините за все это путаницу. Надеюсь, это поможет другим новичкам.

0

Ну вот бесполезный ответ. Поскольку это vbscript не VB.NET, как его код.

Set WshShell = WScript.CreateObject("WScript.Shell") 
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
Set objEvents = objWMIService.ExecNotificationQuery _ 
    ("SELECT * FROM Win32_PowerManagementEvent") 

Do 
    Set objReceivedEvent = objEvents.NextEvent 
    wscript.echo objReceivedEvent.EventType 
Loop 

Использование с CScript.

EventType типа

данных: uint16

Тип доступа: только для чтения

Тип изменения состояния системы питания.

Значение Значение

4 Ввод Приостановка

7 Возобновить работу

10 Мощность Изменение состояния

11 OEM Событие

18 Резюме Автоматическая

OEMEventCode

Тип данных: uint16

Тип доступа: только для чтения

состояния системы питания определяется производителем оригинального оборудования (OEM), когда EventType свойство этого класса устанавливается в 11 (OEM-событие); в противном случае для этого свойства установлено значение NULL. События OEM генерируются, когда APM BIOS сигнализирует о событии APM OEM. Коды событий OEM находятся в диапазоне 0x0200h - 0x02FFh.

0

Ваш код VB.NET не VBScript. Вам нужно использовать VB.NET для компиляции кода и запуска его. Здесь есть инструкции, КАК СОСТАВИТЬ ВАШ ПРОГРАММНЫЙ КОД.

http://social.msdn.microsoft.com/Forums/en-US/adcae113-4758-481a-a367-60d5d14d97d6/this-is-how-to-turn-vbs-and-js-files-into-exe-files-from-the-command-line-without-third-party-tools?forum=scripting

+1

предоставить код в вашем ответе ... –

+1

В моем другом ответе есть код, который он может использовать. Но вопрос: «Как сделать код VB.NET». Ответ: вы должны скомпилировать (нет IDE или отладчика). – Trigger