AllowSetForegroundWindow

AllowSetForegroundWindow

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

用户与之交互的应用程序是由“ 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指定的条件,即:

该过程不是前台过程。

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

(即使该流程创建了前台流程)。

有没有一种方法可以使用带有从该进程中调用AllowSetForegroundWindow()的标志或设置来调用CreateProcess()?还是可以用于使Windows认为已启动进程与出于SetForegroundWindow权限而启动该进程的进程“相同”的标志?

还是有另一种方法可以在创建的流程对话框的顶部显示助手应用程序生成的对话框?

最佳答案

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

我还没有测试过。

09-04 10:44