Bonjour,

Pour récupérer des données d'une API tierce, je suis obligé d'éxecuter un script PowerShell. Jusque-là, pas trop de problème sauf que je souhaite le lancer en mode réduit et avoir le retour de la fin du script.

1. Executer mon script PowerShell via .RUN me permet de le lancer en arrière-plan (fenêtre minimisée et garde la fenêtre principale active) mais pas la fin du script (donc tempo obligatoire et 2s quand tu as beaucoup de lignes, c'est long) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Set WsShell = CreateObject("WScript.Shell")
WsShell.Run (strCommand), 7, True 'Displays the window as a minimized window. The active window remains active.
Application.Wait (Now + TimeValue("00:00:02"))
2. Executer mon script PowerShell via .Exec me permet de savoir que le script est terminé et donc de continuer sans attendre les 2s. Par contre, impossible de lancer la fenêtre PowerShell en arrière-plan :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Set WsShell = CreateObject("WScript.Shell")
Set oExec = WsShell.Exec(strCommand)
Do While oExec.Status = 0
Sleep 100
Loop
J'ai tenté de réduire la fenêtre après le lancement mais sans succès :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Private Const WM_SYSCOMMAND As Long = &H112
Private Const SC_MINIMIZE As Long = &HF020 
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function PostMessageW Lib "user32.dll" (ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function ShowWindowAsync Lib "user32.dll" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
 
SendMessage oExec.processID, WM_SYSCOMMAND, SC_MINIMIZE, 0
ShowWindowAsync oExec.processID, SC_MINIMIZE
PostMessageW oExec.processID, WM_SYSCOMMAND, SC_MINIMIZE, 0&
D'avance merci pour vos idées !