UDF > WinAPIEx > System > Station & Desktop >


_WinAPI_SwitchDesktop

Rend visible le bureau spécifié et l'active

#include <WinAPISys.au3>
_WinAPI_SwitchDesktop ( $hDesktop )

Paramètre

$hDesktop Handle du bureau. Ce bureau doit être associé à la station window actuelle du processus.

Valeur de retour

Succès: Retourne True
Échec: Retourne False

Remarque

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é".

Voir aussi

Consultez SwitchDesktop dans la librairie MSDN.

Exemple

#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)