简单的多桌面的实现

多个桌面的简单实现,不同桌面可以运行不同程序,互不干扰。纯粹自娱。   原理简单,就不多加解释,主要函数如下: char DesktopID[] = "jingzhongrong"; void SetDesktop() //配置新桌面 {     DWORD currId = GetCurrentThreadId();     hCurrentDesktop = GetThreadDesktop(currId);     if(hCurrentDesktop == NULL)        return;     hNewDesktop = NULL;     HDESK hRet = OpenDesktop(DesktopID,0,FALSE,0);     if(hRet != NULL)        CloseDesktop(hRet);     hNewDesktop = CreateDesktop(DesktopID,NULL,NULL,0,MAXIMUM_ALLOWED,NULL);     if(hNewDesktop == NULL)        return;     SetThreadDesktop(hNewDesktop);     SwitchDesktop(hNewDesktop);     Start(); }   void Start() {     STARTUPINFO startInfo = { 0 };     PROCESS_INFORMATION pi;     startInfo.cb = sizeof(STARTUPINFO);     startInfo.lpDesktop = DesktopID; CreateProcess(NULL,"explorer",NULL,NULL,TRUE,CREATE_DEFAULT_ERROR_MODE|CREATE_SEPARATE_WOW_VDM,NULL,NULL,&startInfo,&pi);     //hExplorerProcess = pi.hProcess;     //为了在新的桌面上能够使用输入法,创建进程ctfmon.exe CreateProcess(NULL,"ctfmon",NULL,NULL,TRUE,CREATE_DEFAULT_ERROR_MODE|CREATE_SEPARATE_WOW_VDM,NULL,NULL,&startInfo,&pi);        //hCtfmonProcess = pi.hProcess; }   //切换新旧桌面直接使用 SwitchDesktop(hNewDesktop); //或者 SwitchDesktop(hCurrentDesktop);   //退出时将桌面切换回原来桌面,并将新的桌面关闭即可 SwitchDesktop(hCurrentDesktop); if(hNewDesktop != NULL) {   CloseDesktop(hNewDesktop); hNewDesktop = NULL; } if(hCtfmonProcess != NULL) {   TerminateProcess(hCtfmonProcess,0); hCtfmonProcess = NULL; } if(hExplorerProcess != NULL) {   TerminateProcess(hExplorerProcess,0); hExplorerProcess = NULL; }

 

完整程序下载见(含使用方法):http://download.csdn.net/source/418570


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部