gpt4 book ai didi

c++ - 如何删除正在运行程序的 Win32 桌面,并终止这些程序?

转载 作者:行者123 更新时间:2023-11-30 03:12:35 24 4
gpt4 key购买 nike

我有这个代码:

#define _WIN32_WINNT 0x0500
#include <cstdlib>
#include <iostream>
#include <windows.h>

using namespace std;

int main(int argc, char *argv[])
{
HDESK hOriginalThread;
HDESK hOriginalInput;
hOriginalThread = GetThreadDesktop(GetCurrentThreadId());
hOriginalInput = OpenInputDesktop(0, FALSE, DESKTOP_SWITCHDESKTOP);


HDESK hNewDesktop=CreateDesktop("BasicAppDesktopDesktop",NULL,NULL,0,DELETE|READ_CONTROL|WRITE_DAC|WRITE_OWNER|GENERIC_ALL,NULL);
/*HDESK hNewDesktop=OpenDesktop("Winlogon", 0, FALSE,
DESKTOP_CREATEMENU |
DESKTOP_CREATEWINDOW |
DESKTOP_ENUMERATE |
DESKTOP_HOOKCONTROL |
DESKTOP_JOURNALPLAYBACK |
DESKTOP_JOURNALRECORD |
DESKTOP_READOBJECTS |
DESKTOP_SWITCHDESKTOP |
DESKTOP_WRITEOBJECTS);
*/

SetThreadDesktop(hNewDesktop);
SwitchDesktop(hNewDesktop);
//system("cmd");
STARTUPINFOA si = {0};
si.cb = sizeof(STARTUPINFO);
si.lpDesktop = "winsta0\\BasicAppDesktopDesktop";
PROCESS_INFORMATION infos;
CreateProcess(NULL,"explorer",NULL,NULL,false,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&infos);
//WaitForSingleObject( infos.hProcess, INFINITE );
while(!(GetAsyncKeyState(VK_F12) == -32767))Sleep(50);
CloseHandle( infos.hProcess );
CloseHandle( infos.hThread );

SwitchDesktop(hOriginalInput);
SetThreadDesktop(hOriginalThread);
CloseDesktop(hNewDesktop);
CloseDesktop(hOriginalInput);
return 0;
}

当我按 F12 时,桌面切换到原来的,程序将关闭,但如果我在第二个桌面运行任何程序,则不会终止,当我再次运行我的程序时,任何程序都会出现。有没有办法删除带有程序的桌面,或者在退出时自动终止通过第二个桌面运行的程序?请帮忙。

最佳答案

如果您想强制终止您使用 CreateProcess 启动的程序(如您发布的代码中所示),那么您可以在返回的句柄上使用 TerminateProcess在您的 PROCESS_INFORMATION 结构中。

如果你想终止所有线程附加到你的新桌面的进程,无论你是否启动它们,那么它有点(好吧,很多)更复杂。您的代码必须执行以下操作:

  1. 枚举所有正在运行的进程(使用 CreateToolhelp32Snapshot)
  2. 依次为每个进程枚举线程(再次使用 CreateToolhelp32Snapshot)
  3. 获取每个线程的桌面句柄(使用 GetThreadDesktop)
  4. 获取该桌面的名称(使用 GetUserObjectInformation)
  5. 与您的桌面名称进行比较
  6. 如果名称匹配,则打开父进程的新句柄并终止它(OpenProcessTerminateProcess)

要编写的代码很多,但它应该可以工作。

关于c++ - 如何删除正在运行程序的 Win32 桌面,并终止这些程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com