我为CreateWindowEx
API 函数创建了一个包装函数,并从 VBScript 中使用它。这是 VBScript:
Dim Result, wcx(10) 'VARIANT ARRAY(10) - WNDCLASSEX
wcx(5) = WINAPI.WinAPI_LoadIcon(NULL, 32516) 'hIcon (IDI_INFORMATION)
wcx(6) = WINAPI.WinAPI_LoadCursor(NULL, 32649) 'hCursor (IDC_HAND)
wcx(7) = 3 'hbrBackground (COLOR_ACTIVECAPTION + 1)
wcx(9) = "DUMMY_CLASS" 'lpszClassName
wcx(10) = WINAPI.WinAPI_LoadIcon(NULL, 32516) 'hIconSm (SAME as hIcon)
'PASS THE VARIANT ARRAY TO THE WRAPPER FUNCTION
Result = WINAPI.WinAPI_RegisterClassEx(wcx)
Dim Style: Style = CLng(&H00CF0000) 'WS_OVERLAPPEDWINDOW
Dim ExStyle: ExStyle = CLng(&H00000100) 'WS_EX_WINDOWEDGE
If CLng(Result) > 0 Then
'CREATE THE WINDOW
Result = WINAPI.WinAPI_CreateWindowEx(ExStyle, "DUMMY_CLASS", "Hello World!", Style, 875, 6, 400, 300, NULL, NULL, NULL, NULL)
WINAPI.WinAPI_ShowWindow Result, 5
WScript.Echo "CreateWindowEx returned 0x" + CStr(UCase(Hex(Result)))
End If
窗口按预期创建并显示正常。但我想知道为什么当我单击创建的窗口的关闭按钮时 Windows 脚本主机终止。
我使用 AutoIt 测试了CreateWindowEx
,当我关闭创建的窗口时,AutoIt3.exe 没有终止,它继续运行脚本,不像 Windows 脚本主机。
我喜欢保持Windows脚本主机运行,即使我关闭了创建的窗口。
无论如何,没有实现我想要的,我想知道Windows脚本主机发生这种情况的原因是什么。
我通过更改窗口过程来解决问题,如下所示:
LRESULT CALLBACK WindowProc(_In_ HWND hwnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam) {
switch (uMsg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
break;
/*FOLLOWING LINES WERE REMOVED:
case WM_DESTROY:
PostQuitMessage(0);
break;*/
default: return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
出现此问题是因为我忘记了Windows脚本主机不是标准的WinForms应用程序,因此当窗口被破坏时不需要关闭它。