2017-01-07 2 views
0

Я могу использовать только vbscript на этом компьютере, я бы хотел отобразить значок в systray.Создание значка systray с помощью vbscript?

Я нашел аналогичный вопрос и ответ, используя VBA. Display new mail icon in Windows taskbar using VBScript

Существует также этот код от Microsoft, который объясняет, как сделать это с помощью VBA How to use the System Tray directly from Visual Basic

Эти решения работают со следующими API вызова

Public Declare Function Shell_NotifyIcon Lib "shell32" _ 
     Alias "Shell_NotifyIconA" _ 
     (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean 

Проблема в том, как создать пользователя -пределенный тип в vbscript.

Public Type NOTIFYICONDATA 
     cbSize As Long 
     hwnd As Long 
     uId As Long 
     uFlags As Long 
     uCallBackMessage As Long 
     hIcon As Long 
     szTip As String * 64 
End Type 

VBScript имеет только «вариант» для всех переменных, не существует TYPE заявление, чтобы создать такую ​​вещь Shell_NotifyIcon потребностей.

Я где-то читал возможность использования выражения класса.

Возможно, что-то вроде этого?

Class NOTIFYICONDATA 
cbSize 
hwnd 
uId 
uFlags 
uCallBackMessage 
hIcon 
szTip(64) 
End Class 

Однако я считаю, что мой синтаксис неверен или что объект класса не работает таким образом. Или, может быть, поскольку каждый компонент этого класса является вариантом, а не типом, который Shell_NotifyIcon ожидает, это не сработает?

Я не против использования уродливого, чтобы заставить vbscript-движок превращать соответствующий объект памяти в вызов API, если есть какой-либо способ?

(В более позднем эпизоде, если мне удастся создать значок systray, я бы хотел получить события click от значка и отобразить контекстное меню (vbscript не имеет объекта формы для создания пользовательских интерфейсов, за исключением крайне ограниченного формы из объектов HTA, которые я предпочитаю не использовать))

+4

В отличие от VBA, вы не можете вызывать Windows API непосредственно в VBScript. Единственный способ сделать это - написать COM-обертку, которая выполняет одну и ту же функцию и вместо этого называет это. – Lankymart

ответ

2

Как указано @Lankymart, VBScript не может напрямую использовать Windows API. Вы можете написать COM-обертку, которая предоставляет определенные интерфейсы для VBScript, но тогда вы могли бы точно реализовать все свое приложение на VB6 или VB.net.

+0

Спасибо, причина, по которой я использую vbscript, заключается в том, что у моего рабочего компьютера нет доступа администратора, поэтому установка VB6 или .net не является вариантом. Вот почему я обратился к vbscript в первую очередь. Я также попробовал метод в следующем URL-адресе, однако что-то пошло не так, как при запуске финального файла vbs, который я получил «Компонент ACtiveX не может создать объект« WindowsScriptingObject »https://social.msdn.microsoft.com/Forums/en- US/df0248cb-612f-4e2f-9665-11c68c401458/this-is-to-call-win32-api-calls-in-vbscript-and-jscript-sample-windows-api-functions? Forum = scripting – Shodan

+0

Просмотр logs Я только что нашел, что пошло не так, даже несмотря на то, что я получил. DLL-файл, этот метод также требовал привилегий администратора для его регистрации. При выполнении regasm/codebase я получил следующее сообщение. RegAsm: ошибка RA0000: Произошла ошибка при записи регистрационной информации в реестр. Для использования выбранных o плееров необходимы разрешения администратора. Для выполнения этих задач используйте командную строку администратора. – Shodan

+0

Есть ли способ вызвать wso.dll, в любом случае, из vbscript, не регистрируя его как activex для всей системы? – Shodan

 Смежные вопросы

  • Нет связанных вопросов^_^