Rend visible le bureau spécifié et l'active
#include <WinAPISys.au3>
_WinAPI_SwitchDesktop ( $hDesktop )
$hDesktop | Handle du bureau. Ce bureau doit être associé à la station window actuelle du processus. |
Succès: | Retourne True |
Échec: | Retourne False |
La fonction _WinAPI_SwitchDesktop() échoue si le bureau appartient à une station fenetre invisible. Cette fonction échoue également lorsqu'elle est appelée à partir d'un processus qui est associé à un bureau sécurisé comme les bureaux WinLogon et ScreenSaver.
Les processus qui sont associés à un bureau sécurisé comprennent les processus personnalisés UserInit. Ces appels échouent généralement avec une erreur "accès refusé".
Consultez SwitchDesktop 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)