gpt4 book ai didi

c++ - 在 WIN32 上结合 CreateProcess 和 AllowSetForegroundWindow

转载 作者:太空宇宙 更新时间:2023-11-04 14:20:10 25 4
gpt4 key购买 nike

我有一个应用程序,它本质上是一个包装另一个应用程序的“助手”应用程序。

用户与之交互的应用是由“助手”应用创建的进程,如下所示:

PROCESS_INFORMATION processInfo;
STARTUPINFO startupInfo;
memset(&processInfo, 0, sizeof(processInfo));
memset(&startupInfo, 0, sizeof(startupInfo));
startupInfo.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
startupInfo.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
startupInfo.hStdError = GetStdHandle(STD_ERROR_HANDLE);
startupInfo.dwFlags = STARTF_USESTDHANDLES;
startupInfo.cb = sizeof(startupInfo);
int retval = CreateProcess(cmd, cmdLine, NULL, NULL, false,
CREATE_NO_WINDOW, NULL, NULL, &startupInfo,
&processInfo);

这个进程是一个可执行文件,我没有源代码也无法对其进行更改。

“助手”应用程序主要根据来自其他应用程序的网络流量做一些事情。有一次,我想根据用户在启动的 UI 进程中所做的事情,从助手应用程序中显示一个文件浏览对话框。

当我从助手应用程序中显示文件对话框时,它显示在所创建进程的 UI 后面,这并不理想。我尝试从助手应用程序调用 SetForegroundWindow() 但它不符合 MSDN 文档 ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms633539%28v=vs.85%29.aspx ) 中为 SetForegroundWindow 指定的标准,即:

进程不是前台进程。

进程不是由前台进程启动的。

(即使进程创建了前台进程)。

有没有一种方法可以使用标志或设置来调用 CreateProcess(),就像从该进程调用 AllowSetForegroundWindow() 一样?或者可以用来让 Windows 认为启动的进程与出于 SetForegroundWindow 权限目的而启动它的进程“相同”的标志?

或者是否有另一种方法可以在创建的进程的对话框之上显示助手应用程序生成的对话框?

最佳答案

我能想到的唯一解决方案是对子进程进行远程线程注入(inject),然后让注入(inject)的线程使用适当的参数调用 AllowSetForegroundWindow 以允许父进程窃取前台。

不过我还没有测试过。

关于c++ - 在 WIN32 上结合 CreateProcess 和 AllowSetForegroundWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8252145/

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