2017-07-31 126 views
0

我爲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發生這種情況的原因是什麼。

回答

1

我改變如下窗口過程解決了這一問題:

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應用程序,所以它並不需要窗戶被毀壞時關閉。

相關問題