Тема: WSH & Win32API: Библиотека scrsvc.dll
Без гарантий. Используете на свой страх и риск.
v1.2.2.1 (текущая актуальная версия)
Библиотека scrsvc.dll предназначена для вызова stdcall/cdecl WinAPI функций в сценариях VBScript и JScript, а также для отображения диалога множественного выбора и предоставляет объект ScriptService.Service.
Тестировалась на Win7 x32
1) Пример использования на VBScript (перечисление окон в системе):
' Перебор окон с помощью объекта ScriptService.Service в VBScript
' WinXP/7
Option Explicit
Dim oScrSvc, oStream
Dim sFile, sStr
Dim iLen
' Создание объектов
'--------------------------------------------------------------
Set oScrSvc = CreateObject("ScriptService.Service")
iLen = 255
sStr = String(iLen,Chr(32))
sFile = GetFilePath()
Set oStream = CreateObject("Scripting.FileSystemObject").OpenTextFile(sFile, 2, True, 0)
oStream.WriteLine String(6,Chr(32)) & "HWND" & vbTab & "Class Name"
' Перебор окон, назначение функции обратного вызова
'--------------------------------------------------------------
With oScrSvc
.set_vararg 0, oScrSvc.internal_callback(Me, "EnumClbck",2)
.set_vararg 1, 0
.api_call "USER32.DLL","EnumWindows",2
End With
oStream.Close()
Set oStream = Nothing
Set oScrSvc = Nothing
' Отображение результата
'--------------------------------------------------------------
CreateObject("WScript.Shell").Run "notepad" & Chr(32) & """" & sFile & """", 1, False
WScript.Quit()
' Функция обратного вызова
'--------------------------------------------------------------
Function EnumClbck(hwnd, lParam)
Dim sH
With oScrSvc
.set_vararg 0, CDbl(hwnd)
.set_strarg 1, sStr, True
.set_vararg 2, ilen
.api_call "USER32.DLL","GetClassNameW",3,1
End With
' Заполнение файла полученными данными
sH = Hex(hwnd)
oStream.WriteLine "0x" & String(8-Len(sH),"0") & sH & vbTab & oScrSvc.pull_string(sStr,True)
End Function
' Путь к файлу вывода
'--------------------------------------------------------------
Function GetFilePath()
Dim sF
sF = WScript.ScriptFullName
GetFilePath = Left(sF, InStrRev(sF, "\")) & "windows.txt"
End Function
2) Пример использования на VBScript (отображение диалога множественного выбора):
' Диалог множественного выбора в VBScript
' WinXP/7
Option Explicit
Dim oScrSvc
Dim arr(50)
Dim arrRet
Dim i
Dim s
' Создание объекта
'--------------------------------------------------------------
Set oScrSvc = CreateObject("ScriptService.Service")
s = "Выбранные значения: " & vbCRLF
' Заполнить массив значениями
For i=0 To 49
arr(i)="значение_" & i
Next
' Вызвать диалог
arrRet = oScrSvc.multi_dialog(arr)
' Разобрать выбранные значения
For i=0 To UBound(arrRet)
s = s & arrRet(i) & vbCRLF
Next
MsgBox s, vbSystemModal Or vbInformation, "Reply"
'--------------------------------------------------------------
Set oScrSvc = Nothing
WScript.Quit()
Cкачать scrsvc.dll(v1.2.2.1) + примеры с файлообменника.
Справку readme, а также примеры использования см. в архиве библиотеки.