如何在VBScript

时间:2017-07-14 14:21:35

标签: c++ winapi vbscript com enumerate

我正在编写一个在VBScript中使用的Windows API COM包装器,并且遇到了回调控制函数的问题,例如EnumWindows

这就是我目前的情况:

STDMETHODIMP CWinAPI::WinAPI_EnumWindows(BSTR lpEnumFunc, int lParam, int *Result)
{
    *Result = int(EnumWindows(WNDENUMPROC(lpEnumFunc), lParam))

    return S_OK;

}

但是,正如我所料,这不起作用,当我使用它与VBScript时,它会崩溃。

如何从我的COM包装器中导出EnumWindows以在VBScript中使用,并且VBScript是否支持使用它?如果是这样,我如何在VBScript中使用EnumWindowsProc回调函数?

更新

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 ++显示。(例如via消息框)。

此函数的lParam参数可以从VBScript设置,但如何设置EnumWindowsProc?是否可以使用GetRef或类似的VBSript来完成?但是GeRef只允许一个参数。我希望这个EnumWindowsProc回调函数也在VBScript中声明,否则包装这个函数就变得无用了。

我从@ Alex.K的评论中读到this帖子,发现它非常有用,但我无法理解如何将其与EnumWindows的回调EnumWindowsProc一起使用。

请帮我详细说明。

0 个答案:

没有答案