Ferme le handle ouvert d'un objet Desktop (bureau Windows)
#include <WinAPISys.au3>
_WinAPI_CloseDesktop ( $hDesktop )
$hDesktop | Handle du bureau à fermer. |
Succès: | Retourne True. |
Échec: | Retourne False, appelez _WinAPI_GetLastError() pour obtenir des informations sur l'erreur. |
La fonction _WinAPI_CloseDesktop() échouera si un thread du processus appelant utilise le handle de bureau spécifiée ou si le handle se réfère au bureau initial du processus appelant.
Consultez CloseDesktop dans la librairie MSDN.
#include <APIProcConstants.au3> #include <APISysConstants.au3> #include <MsgBoxConstants.au3> #include <WinAPIMem.au3> #include <WinAPIProc.au3> #include <WinAPISys.au3> ; Récupére le handle du bureau actuel et crée un nouveau bureau nommé "MyDesktop" Local $hPrev = _WinAPI_GetThreadDesktop(_WinAPI_GetCurrentThreadId()) Local $hDesktop = _WinAPI_CreateDesktop('MyDesktop', BitOR($DESKTOP_CREATEWINDOW, $DESKTOP_SWITCHDESKTOP)) If Not $hDesktop Then MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Unable to create desktop.') Exit EndIf ; Bascule sur le bureau nouvellement créé _WinAPI_SwitchDesktop($hDesktop) ; Exécute "calc.exe" sur "MyDesktop" et attend jusqu'à ce qu'un processus soit fermé par l'utilisateur Local $pText = _WinAPI_CreateString('MyDesktop') Local $tProcess = DllStructCreate($tagPROCESS_INFORMATION) Local $tStartup = DllStructCreate($tagSTARTUPINFO) DllStructSetData($tStartup, 'Size', DllStructGetSize($tStartup)) DllStructSetData($tStartup, 'Desktop', $pText) If _WinAPI_CreateProcess('', @SystemDir & '\calc.exe', 0, 0, 0, $CREATE_NEW_PROCESS_GROUP, 0, 0, DllStructGetPtr($tStartup), DllStructGetPtr($tProcess)) Then ProcessWaitClose(DllStructGetData($tProcess, 'ProcessID')) EndIf ; Bascule sur le bureau précédent et ferme "MyDesktop" _WinAPI_SwitchDesktop($hPrev) _WinAPI_CloseDesktop($hDesktop) ; Libère la mémoire allouée pour une chaîne _WinAPI_FreeMemory($pText)