Я пишу оболочку COM для Windows API для использования в VBScript, и у меня возникла проблема с функциями, управляемыми обратным вызовом, такими как EnumWindows
,
Вот что у меня сейчас:
STDMETHODIMP CWinAPI::WinAPI_EnumWindows(BSTR lpEnumFunc, int lParam, int *Result)
{
*Result = int(EnumWindows(WNDENUMPROC(lpEnumFunc), lParam))
return S_OK;
}
Но, как я и ожидал, это не сработало, и когда я использую это с VBScript, происходит сбой.
Как я могу экспортировать EnumWindows
из моей оболочки COM для использования в VBScript и будет ли VBScript поддерживать его? Если так, как я могу использовать EnumWindowsProc
функция обратного вызова в VBScript?
ОБНОВИТЬ
BSTR WindowClassName = SysAllocString(L"");
WCHAR WindowTitle[8192];
BOOL CALLBACK EnumWindowsProc(
__in HWND hWnd,
__in LPARAM lParam
)
{
RealGetWindowClass(hWnd, WindowClassName, 100);
GetWindowText(hWnd, WindowTitle, 8192);
if (0 == wcscmp(WindowClassName, L"#32768"))
{
//<< NOW, HWND need to be caught by WSH and then show it. (I.E. WScript.Echo HWND) >>
}
return TRUE;
}
STDMETHODIMP CWinAPI::WinAPI_EnumWindows(int lParam)
{
EnumWindows(EnumWindowsProc, lParam);
return S_OK;
}
Dim WINAPI: Set WINAPI = WScript.CreateObject("WinAPIWrapperLib.WINAPI")
WINAPI.WinAPI_EnumWindows 0
Теперь я сделал выше, но вместо этого мне нужно WSH, чтобы узнать, найден ли дескриптор для указанного типа окна и вернуть HWND
внутренне и показывать его из WSH, а не напрямую из C ++. (например, через окно сообщения).
Эта функция lParam
параметр может быть установлен из VBScript, но как я могу установить EnumWindowsProc
? Это можно сделать с помощью GetRef
или что-то подобное в VBSript? Но GeRef
позволяет только один параметр. я хочу этот EnumWindowsProc
функция обратного вызова также должна быть объявлена в VBScript, иначе перенос этой функции становится бесполезным.
Я читаю этот пост от комментария @ Alex.K и нашел его очень полезным, но я не могу понять, как его использовать с EnumWindows
обратный звонок EnumWindowsProc
,
Пожалуйста, помогите мне больше в этом.
Задача ещё не решена.
Других решений пока нет …