当关闭创建的窗口时,Windows脚本主机终止

当关闭创建的窗口时,Windows脚本主机终止

问题描述:

我为CreateWindowEx API函数创建了一个包装函数,并在VBScript中使用它。这是VBScript:当关闭创建的窗口时,Windows脚本主机终止

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 Script Host不同。

即使我关闭了创建的窗口,我仍然希望保持Windows脚本宿主运行。

无论如何都无法实现我想要的,我想知道Windows Script Host发生这种情况的原因是什么。

我改变如下窗口过程解决了这一问题:

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应用程序,所以它并不需要窗户被毁坏时关闭。