Crée un nouveau bureau, et l'associe à la station window actuelle du processus appelant
#include <WinAPISys.au3>
_WinAPI_CreateDesktop ( $sName [, $iAccess = 0x0002 [, $iFlags = 0 [, $iHeap = 0 [, $tSecurity = 0]]]] )
$sName | Le nom du bureau à créer. Les noms de bureau sont insensibles à la casse et ne peuvent pas contenir de barre oblique inverse (\). |
$iAccess | [optionnel] L'accès demandé sur le bureau. Ce paramètre peut prendre une ou plusieurs des valeurs suivantes: $DESKTOP_ALL_ACCESS $DESKTOP_CREATEMENU $DESKTOP_CREATEWINDOW (par défaut) $DESKTOP_ENUMERATE $DESKTOP_HOOKCONTROL $DESKTOP_JOURNALPLAYBACK $DESKTOP_JOURNALRECORD $DESKTOP_READOBJECTS $DESKTOP_SWITCHDESKTOP $DESKTOP_WRITEOBJECTS |
$iFlags | [optionnel] Les flags optionnels. Peut prendre la valeur zéro ou la valeur suivante: $DF_ALLOWOTHERACCOUNTHOOK |
$iHeap | [optionnel] La taille du bureau sur le tas, en kilo-octets. Par défaut, 0. |
$tSecurity | [optionnel] La structure $tagSECURITY_ATTRIBUTES qui détermine si le handle retourné peut être hérité par les processus enfants. Si ce paramètre est 0 (par défaut), le handle ne peut pas être hérité. |
Succès: | Retourne le handle du bureau nouvellement créé. Si le bureau spécifié existe déjà, la fonction réussit et retourne le handle du bureau existant. |
Échec: | Retourne 0, appelez _WinAPI_GetLastError() pour obtenir des informations sur l'erreur. |
Le nombre de bureaux qui peuvent être créés est limité par la taille du tas système pour les bureaux.
Vous pouvez augmenter le nombre de bureaux qui peuvent être créés en augmentant de la taille du tas pour les bureaux ou en réduisant le tas par défaut réservé pour chaque bureau dans la station window interactive.
La taille par défaut du tas réservé à un bureau dépend de facteurs tels que l'architecture matérielle.
Pour récupérer la taille du tas, appelez la fonction _WinAPI_GetUserObjectInformation() avec $UOI_HEAPSIZE.
Lorsque vous avez fini d'utiliser un bureau, appelez la fonction _WinAPI_CloseDesktop() pour le fermer.
_WinAPI_CloseDesktop, _WinAPI_GetUserObjectInformation
Consultez CreateDesktopEx 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)