2017-07-31 7 views
0

J'ai créé une fonction wrapper pour la fonction API CreateWindowEx et l'ai utilisée à partir d'un script VBScript. Voici le VBScript:Windows Script Host se termine à la fermeture de la fenêtre créée

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 

La fenêtre crée comme prévu et s'affiche correctement. Mais je me demande pourquoi Windows Script Host se termine lorsque je clique sur le bouton de fermeture de la fenêtre créée.

Et j'ai testé CreateWindowEx en utilisant AutoIt, quand j'ai fermé la fenêtre créée, AutoIt3.exe n'est pas terminé et il a continué à exécuter le script contrairement à Windows Script Host. J'aime maintenir Windows Script Host en cours même si je ferme la fenêtre créée.

N'y at-il pas de toute façon pour réaliser ce que je veux et je veux savoir quelle est la raison pour que cela se produise avec Windows Script Host.

Répondre

1

je résolu le problème en modifiant la procédure de fenêtre ci-dessous:

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; 
} 

Le problème est survenu parce que j'oublié que Windows Script Host est fonctionne pas comme une application standard WinForms, donc il n'a pas besoin de être fermé lorsque la fenêtre est détruite.