首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在WIN32上组合CreateProcess和AllowSetForegroundWindow

在WIN32上组合CreateProcess和AllowSetForegroundWindow
EN

Stack Overflow用户
提问于 2011-11-24 12:12:54
回答 1查看 1.8K关注 0票数 1

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

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

代码语言:javascript
运行
复制
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权限?

或者,有没有其他方法可以在创建的进程对话框上显示助手应用程序生成的对话框?

EN

回答 1

Stack Overflow用户

发布于 2011-11-24 14:05:10

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

我还没有测试过这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8252145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档