简单的多桌面的实现
多个桌面的简单实现,不同桌面可以运行不同程序,互不干扰。纯粹自娱。 原理简单,就不多加解释,主要函数如下: 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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
