我有一个应用程序,它本质上是一个包装了另一个应用程序的“助手”应用程序。
用户与之交互的应用程序是由"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);
这个过程是一个可执行文件,我没有源代码,也不能对其进行更改。
"helper“应用程序主要根据来自另一个应用程序的网络流量做一些事情。有一次,我想根据用户在启动的UI进程中所做的事情,从助手应用程序中显示一个文件浏览对话框。
当我从助手应用程序显示文件对话框时,它显示在创建的进程的UI后面,这并不理想。我尝试从助手应用程序调用SetForegroundWindow( ),但它不符合MSDN文档( http://msdn.microsoft.com/en-us/library/windows/desktop/ms633539%28v=vs.85%29.aspx )中为SetForegroundWindow指定的标准,即:
该进程不是前台进程。
该进程未由前台进程启动。
(即使该进程创建了前台进程)。
有没有一种方法可以使用标志或设置调用CreateProcess(),其工作方式类似于从该进程调用AllowSetForegroundWindow()?或者一个标志,可以用来让Windows认为启动的进程与启动它的进程“相同”,目的是为了获得SetForegroundWindow权限?
或者,有没有其他方法可以在创建的进程对话框上显示助手应用程序生成的对话框?
发布于 2011-11-24 14:05:10
我能想到的唯一解决方案是对子进程进行远程线程注入,然后让注入的线程使用适当的参数调用AllowSetForegroundWindow
,以允许父进程窃取回前台。
我还没有测试过这一点。
https://stackoverflow.com/questions/8252145
复制相似问题