2017-07-31 5 views
0

CreateWindowEx API関数のラッパー関数を作成し、VBScriptから使用しました。これはVBScript:作成したウィンドウを閉じるときにWindows Script Hostが終了する

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 Script Hostが終了する理由が不思議です。

AutoItを使用してCreateWindowExをテストしました。作成したウィンドウを閉じたときにAutoIt3.exeが終了せず、Windows Script Hostとは違ってスクリプトが実行され続けました。

私は、作成したウィンドウを閉じてもWindows Script Hostを実行したままにしておきたいと思います。

私が欲しいものを達成するための方法はありません。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アプリケーションとして機能していないことを忘れてしまったため、問題が発生しました窓が壊れると閉じます。

関連する問題