三个的函数的说明如下:CreateDesktop The CreateDesktop function creates a new desktop on the window station associated with the calling process. It returns a handle that can be used to access the new desktop. The calling process must have an associated window station, either assigned by the system at process creation time or set by SetProcessWindowStation. A desktop is a secure object contained within a window station object. A desktop has a logical display surface and contains windows, menus, and hooks.HDESK CreateDesktop( LPCTSTR lpszDesktop, // name of the new desktop LPCTSTR lpszDevice, // reserved; must be NULL. LPDEVMODE pDevMode, // reserved; must be NULL DWORD dwFlags, // flags to control interaction with other // applications DWORD dwDesiredAccess, // specifies access of returned handle LPSECURITY_ATTRIBUTES lpsa // specifies security attributes of // the desktop );
Parameters lpszDesktop Pointer to a null-terminated string specifying the name of the desktop to be created. Desktop names are case-insensitive and may not contain backslash characters (\). lpszDevice Reserved; must be NULL. The desktop uses the default display driver loaded at boot time. pDevMode Reserved; must be NULL. dwFlags A bit flag parameter that controls how the calling application will cooperate with other applications on the desktop. This parameter can specify zero or the following value: Value Description DF_ALLOWOTHERACCOUNTHOOK Allows processes running in other accounts on the desktop to set hooks in this process. dwDesiredAccess Specifies the access rights the returned handle has to the desktop. This parameter must include the DESKTOP_CREATEWINDOW flag because internally CreateDesktop uses the handle to create a window. In addition, you can specify any of the standard access rights, such as READ_CONTROL or WRITE_DAC, and a combination of the following desktop-specific access rights. Value Description DESKTOP_CREATEMENU Required to create a menu on the desktop. DESKTOP_CREATEWINDOW Required to create a window on the desktop. DESKTOP_ENUMERATE Required for the desktop to be enumerated. DESKTOP_HOOKCONTROL Required to establish any of the window hooks. DESKTOP_JOURNALPLAYBACK Required to perform journal playback on the desktop. DESKTOP_JOURNALRECORD Required to perform journal recording on the desktop. DESKTOP_READOBJECTS Required to read objects on the desktop. DESKTOP_SWITCHDESKTOP Required to activate the desktop using the SwitchDesktop function. DESKTOP_WRITEOBJECTS Required to write objects on the desktop. lpsa Pointer to a SECURITY_ATTRIBUTES structure that determines whether the returned handle can be inherited by child processes. If lpsa is NULL, the handle cannot be inherited. The lpSecurityDescriptor member of the structure specifies a security descriptor for the new desktop. If lpsa is NULL, the desktop inherits its security descriptor from the parent window station. Return Values If the function succeeds, the return value is a handle to the newly created desktop. If the specified desktop already exists, the function succeeds and returns a handle to the existing desktop. When you are finished using the handle, call the CloseDesktop function to close it.If the function fails, the return value is NULL. To get extended error information, call GetLastError.Res The CreateDesktop function returns a handle that can be used to access the desktop.If the dwDesiredAccess parameter specifies the READ_CONTROL, WRITE_DAC, or WRITE_OWNER standard access rights to access the security descriptor of the desktop object, you must also request the DESKTOP_READOBJECTS and DESKTOP_WRITEOBJECTS access rights.SwitchDesktop The SwitchDesktop function makes a desktop visible and activates it. This enables the desktop to receive input from the user. The calling process must have DESKTOP_SWITCHDESKTOP access to the desktop for the SwitchDesktop function to succeed.BOOL SwitchDesktop( HDESK hDesktop // handle to desktop to activate );
Parameters hDesktop Handle to the desktop to be made visible and active. This handle is returned by the CreateDesktop and OpenDesktop functions. Return Values If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, call GetLastError.Res The SwitchDesktop function will fail if the desktop belongs to an invisible window station.CloseDesktop The CloseDesktop function closes an open handle to a desktop object. A desktop is a secure object contained within a window station object. A desktop has a logical display surface and contains windows, menus and hooks.BOOL CloseDesktop( HDESK hDesktop // handle to desktop to close );
Parameters hDesktop Handle to the desktop to close. This can be a handle returned by the CreateDesktop, OpenDesktop, or OpenInputDesktop functions. Return Values If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, call GetLastError.Res The CloseDesktop function will fail if any thread in the calling process is using the specified desktop handle or if the handle refers to the initial desktop of the calling process.
Private Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type Dim sa As SECURITY_ATTRIBUTES Private Const GENERIC_ALL = &H10000000private sub creDsk() sa.nLength = Len(SECURITY_ATTRIBUTES) sa.bInheritHandle = True sa.lpSecurityDescriptor = 0newdesk = CreateDesktop("名字", 0, 0, 0, GENERIC_ALL, sa) end sub
先要打开一个桌面才能转换 dskhand = OpenDesktop("名字", 0, True, GENERIC_ALL) xx = SwitchDesktop(dskhand) If xx = 0 Then MsgBox "sorry, 转换失败" End If CloseDesktop (dskhand)'不要忘记关闭打开的句柄 End
The CreateDesktop function creates a new desktop on the window station associated with the calling process. It returns a handle that can be used to access the new desktop. The calling process must have an associated window station, either assigned by the system at process creation time or set by SetProcessWindowStation. A desktop is a secure object contained within a window station object. A desktop has a logical display surface and contains windows, menus, and hooks.HDESK CreateDesktop(
LPCTSTR lpszDesktop, // name of the new desktop
LPCTSTR lpszDevice, // reserved; must be NULL.
LPDEVMODE pDevMode, // reserved; must be NULL
DWORD dwFlags, // flags to control interaction with other
// applications
DWORD dwDesiredAccess, // specifies access of returned handle
LPSECURITY_ATTRIBUTES lpsa // specifies security attributes of
// the desktop
);
Parameters
lpszDesktop
Pointer to a null-terminated string specifying the name of the desktop to be created. Desktop names are case-insensitive and may not contain backslash characters (\).
lpszDevice
Reserved; must be NULL. The desktop uses the default display driver loaded at boot time.
pDevMode
Reserved; must be NULL.
dwFlags
A bit flag parameter that controls how the calling application will cooperate with other applications on the desktop. This parameter can specify zero or the following value: Value Description
DF_ALLOWOTHERACCOUNTHOOK Allows processes running in other accounts on the desktop to set hooks in this process.
dwDesiredAccess
Specifies the access rights the returned handle has to the desktop. This parameter must include the DESKTOP_CREATEWINDOW flag because internally CreateDesktop uses the handle to create a window. In addition, you can specify any of the standard access rights, such as READ_CONTROL or WRITE_DAC, and a combination of the following desktop-specific access rights. Value Description
DESKTOP_CREATEMENU Required to create a menu on the desktop.
DESKTOP_CREATEWINDOW Required to create a window on the desktop.
DESKTOP_ENUMERATE Required for the desktop to be enumerated.
DESKTOP_HOOKCONTROL Required to establish any of the window hooks.
DESKTOP_JOURNALPLAYBACK Required to perform journal playback on the desktop.
DESKTOP_JOURNALRECORD Required to perform journal recording on the desktop.
DESKTOP_READOBJECTS Required to read objects on the desktop.
DESKTOP_SWITCHDESKTOP Required to activate the desktop using the SwitchDesktop function.
DESKTOP_WRITEOBJECTS Required to write objects on the desktop.
lpsa
Pointer to a SECURITY_ATTRIBUTES structure that determines whether the returned handle can be inherited by child processes. If lpsa is NULL, the handle cannot be inherited.
The lpSecurityDescriptor member of the structure specifies a security descriptor for the new desktop. If lpsa is NULL, the desktop inherits its security descriptor from the parent window station. Return Values
If the function succeeds, the return value is a handle to the newly created desktop. If the specified desktop already exists, the function succeeds and returns a handle to the existing desktop. When you are finished using the handle, call the CloseDesktop function to close it.If the function fails, the return value is NULL. To get extended error information, call GetLastError.Res
The CreateDesktop function returns a handle that can be used to access the desktop.If the dwDesiredAccess parameter specifies the READ_CONTROL, WRITE_DAC, or WRITE_OWNER standard access rights to access the security descriptor of the desktop object, you must also request the DESKTOP_READOBJECTS and DESKTOP_WRITEOBJECTS access rights.SwitchDesktop
The SwitchDesktop function makes a desktop visible and activates it. This enables the desktop to receive input from the user. The calling process must have DESKTOP_SWITCHDESKTOP access to the desktop for the SwitchDesktop function to succeed.BOOL SwitchDesktop(
HDESK hDesktop // handle to desktop to activate
);
Parameters
hDesktop
Handle to the desktop to be made visible and active. This handle is returned by the CreateDesktop and OpenDesktop functions.
Return Values
If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, call GetLastError.Res
The SwitchDesktop function will fail if the desktop belongs to an invisible window station.CloseDesktop
The CloseDesktop function closes an open handle to a desktop object. A desktop is a secure object contained within a window station object. A desktop has a logical display surface and contains windows, menus and hooks.BOOL CloseDesktop(
HDESK hDesktop // handle to desktop to close
);
Parameters
hDesktop
Handle to the desktop to close. This can be a handle returned by the CreateDesktop, OpenDesktop, or OpenInputDesktop functions.
Return Values
If the function succeeds, the return value is nonzero.If the function fails, the return value is zero. To get extended error information, call GetLastError.Res
The CloseDesktop function will fail if any thread in the calling process is using the specified desktop handle or if the handle refers to the initial desktop of the calling process.
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Dim sa As SECURITY_ATTRIBUTES
Private Const GENERIC_ALL = &H10000000private sub creDsk()
sa.nLength = Len(SECURITY_ATTRIBUTES)
sa.bInheritHandle = True
sa.lpSecurityDescriptor = 0newdesk = CreateDesktop("名字", 0, 0, 0, GENERIC_ALL, sa)
end sub
dskhand = OpenDesktop("名字", 0, True, GENERIC_ALL)
xx = SwitchDesktop(dskhand)
If xx = 0 Then
MsgBox "sorry, 转换失败"
End If
CloseDesktop (dskhand)'不要忘记关闭打开的句柄
End