VC创建虚拟桌面


    /************************************************* 
     * Create a new Desktop and run a Process in it. * 
     * (Win NT+).                                    * 
     *************************************************/  
    int DLL_EXP_IMP WINAPI Process_Desktop(char *szDesktopName, char *szPath)  
    {  
     HDESK hOriginalThread;  
     HDESK hOriginalInput;  
     HDESK hNewDesktop;  

     // Save original ...  
     hOriginalThread = GetThreadDesktop(GetCurrentThreadId());  
     hOriginalInput = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);  

     // Create a new Desktop and switch to it  
     hNewDesktop = CreateDesktop(szDesktopName, NULL, NULL, 0, GENERIC_ALL, NULL);  
     SetThreadDesktop(hNewDesktop);  
     SwitchDesktop(hNewDesktop);  

     // Execute process in new desktop  
     StartProcess(szDesktopName, szPath);  

     // Restore original ...  
     SwitchDesktop(hOriginalInput);  
     SetThreadDesktop(hOriginalThread);  

     // Close the Desktop  
     CloseDesktop(hNewDesktop);  

     return 0;  
    }  






    /************************************************ 
     * Create a new Desktop and run a Thread in it. * 
     * (Win NT+).                                   * 
     ************************************************/  
    int DLL_EXP_IMP WINAPI Thread_Desktop(LPTHREAD_START_ROUTINE ThreadFunc, THREAD_DATA *td)  
    {  
     HDESK hOriginalThread;  
     HDESK hOriginalInput;  
     HDESK hNewDesktop;  

     // Save original ...  
     hOriginalThread = GetThreadDesktop(GetCurrentThreadId());  
     hOriginalInput = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);  

     // Create a new Desktop and switch to it  
     hNewDesktop = CreateDesktop(td->szDesktopName, NULL, NULL, 0, GENERIC_ALL, NULL);  
     SetThreadDesktop(hNewDesktop);  
     SwitchDesktop(hNewDesktop);  

     // Execute thread in new desktop  
     td->hDesk = hNewDesktop;  
     StartThread(ThreadFunc, td);  

     // Restore original ...  
     SwitchDesktop(hOriginalInput);  
     SetThreadDesktop(hOriginalThread);  

     // Close the Desktop  
     CloseDesktop(hNewDesktop);  

     return 0;  
    }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值