在WIN32上组合CreateProcess和AllowSetForegroundWindow

Combining CreateProcess and AllowSetForegroundWindow on WIN32

本文关键字:AllowSetForegroundWindow CreateProcess 组合 WIN32      更新时间:2023-10-16

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

与用户交互的应用程序是由"helper"应用程序创建的进程,如下所示:

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权限的目的启动它的进程?

或者有另一种方式,我可以显示由辅助应用程序在创建的进程的对话框顶部生成的对话框?

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

我还没有测试过

相关文章:
  • 没有找到相关文章