
当检测到发送exit命令的键组合时,新桌面将关闭,我们将返回到原始桌面,但用户在新桌面中启动的所有应用程序仍在运行.
有没有办法处理在新桌面上打开的所有这些进程,有一个Window Station的HANDLE和新桌面的HDESK句柄?
解决方法 感谢DavID Heffernan的想法,我找到了以下解决方案.有了桌面的HDESK句柄,我使用GetThreadDesktop函数与系统中的每个线程进行比较.我不确定它是最高性能的解决方案,我对改进建议持开放态度,但这样做很好:int main(voID){ // Desktop handles HDESK currentDesktop = GetsecondDesktop(GetCurrentThreadID()); HDESK secondDesktop = CreateDesktop(L"secondDesktop",NulL,GENERIC_ALL,NulL); // Start processes in secondDesktop ... // Process enumeration DWORD aProcesses[1024],cbNeeded,cProcesses; unsigned int i; EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded); cProcesses = cbNeeded / sizeof(DWORD); for (i = 0; i < cProcesses; i++) { if (aProcesses[i] != 0) { DWORD pThreadID = ListProcessthreads(aProcesses[i]); if (GetsecondDesktop(pThreadID) == secondDesktop) { TerminateProcess(aProcesses[i]); } } } return 0;}DWORD ListProcessthreads(DWORD DWOwnerPID){ HANDLE hThreadSnap = INVALID_HANDLE_VALUE; THREADENTRY32 te32; // Take a snapshot of all running threads hThreadSnap = Createtoolhelp32Snapshot(TH32CS_SNAPTHREAD,0); if (hThreadSnap == INVALID_HANDLE_VALUE) return(FALSE); // Fill in the size of the structure before using it. te32.DWSize = sizeof(THREADENTRY32); // RetrIEve information about the first thread,// and exit if unsuccessful if (!Thread32First(hThreadSnap,&te32)) { CloseHandle(hThreadSnap); // Must clean up the snapshot object! return(FALSE); } // Now walk the thread List of the sy@R_502_6563@,// and display information about each thread // associated with the specifIEd process do { if (te32.th32OwnerProcessID == DWOwnerPID) { return te32.th32ThreadID; } } while (Thread32Next(hThreadSnap,&te32)); // Don't forget to clean up the snapshot object. CloseHandle(hThreadSnap); return 0;}BOol TerminateProcess(DWORD DWProcessID){ DWORD DWDesiredAccess = PROCESS_TERMINATE; BOol binheritHandle = FALSE; HANDLE hProcess = OpenProcess(DWDesiredAccess,binheritHandle,DWProcessID); if (hProcess == NulL) return FALSE; UINT uExitCode = 0; BOol result = TerminateProcess(hProcess,uExitCode); CloseHandle(hProcess); return result;} 总结 以上是内存溢出为你收集整理的c – 获取在某个桌面中打开的所有进程全部内容,希望文章能够帮你解决c – 获取在某个桌面中打开的所有进程所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)