CreateDesktop
SwitchDesktop
CloseDesktop请给予一个可用的例子。谢谢啦

解决方案 »

  1.   

    三个的函数的说明如下: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.
      

  2.   

    http://www.chinabcb.com/article/article.php?aid=18这里有个例子,可以参考。
      

  3.   

    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
      

  4.   

    先要打开一个桌面才能转换
    dskhand = OpenDesktop("名字", 0, True, GENERIC_ALL)
    xx = SwitchDesktop(dskhand)
    If xx = 0 Then
       MsgBox "sorry, 转换失败"
    End If
      CloseDesktop (dskhand)'不要忘记关闭打开的句柄
    End