gpt4 book ai didi

创建独立的隐藏进程

转载 作者:行者123 更新时间:2023-11-30 18:09:36 25 4
gpt4 key购买 nike

我正在使用以下代码创建一个隐藏主窗口的应用程序:

STARTUPINFO siStartupInfo;
PROCESS_INFORMATION piProcessInfo;

memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));

siStartupInfo.cb = sizeof(siStartupInfo);
siStartupInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_FORCEOFFFEEDBACK | STARTF_USESTDHANDLES;
siStartupInfo.wShowWindow = SW_HIDE;

if(CreateProcess(MyApplication, "", 0, 0, FALSE, 0, 0, 0, &siStartupInfo, &piProcessInfo) == FALSE)
{
// blah
return 0;
}

一切正常,除了我的主应用程序(调用此代码的应用程序)窗口在我打开新程序时失去焦点。我尝试降低新进程的优先级,但焦点问题仍然存在。

有什么办法可以避免这种情况吗?此外,有没有办法在不使用 CreateProcess(或任何调用 CreateProcess 的 API,如 ShellExecute)的情况下创建另一个进程?

我的猜测是我的应用程序正在失去焦点,因为它被交给了新进程,即使它是隐藏的。

对于那些好奇的人肯定会问“为什么要这样做”,我的答案是因为我有一个看门狗进程,它不能成为服务,并且每当我打开主应用程序时它就会启动。满意吗?

感谢您的帮助。代码将不胜感激。杰西。

最佳答案

您正在运行的应用程序正在获取窗口焦点。

解决此问题的一种方法是在新桌面中启动新进程。这将防止应用程序窃取桌面上的窗口焦点。

在新桌面上运行进程的代码应如下所示:

HDESK hOld = GetThreadDesktop( GetCurrentThreadId() );
HDESK hNew = OpenDesktop( "name", 0, FALSE, GENERIC_ALL );
SetThreadDesktop( hNew );
CreateProcess( ... );
SetThreadDesktop( hOld );
CloseDesktop( hNew );

关于创建独立的隐藏进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1820324/

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