c++ - 使用 ShellExecute 打开 URL - C++ 中的 SW_SHOW MAXIMIZED 非事件窗口

标签 c++ google-chrome shellexecute

我使用这个函数在 Chrome 中打开新标签并激活它:

ShellExecuteA(0,0,"chrome.exe","http://google.com  --incognito",0,SW_SHOWMAXIMIZED);

但 Chrome 只打开新标签页,但不会激活窗口。
(如果用户按下指定的键,我从没有用户界面的应用程序的全局键盘 Hook 调用此函数)。

我该如何解决?

最佳答案

看起来像是 chrome.exe 中的错误。如果常规(非隐身)chrome.exe session 正在运行并且没有隐身 session 正在运行,我可以从一个简单的控制台应用程序使用您的 ShellExecute 调用进行重现。换句话说,如果需要生成新的隐身 chrome session ,则常规 session 似乎无法将 ShowWindow 标志正确传播到生成的隐身进程。另一个因素是激活失败还需要在测试应用程序运行之前激活常规 chrome session 。如果任何其他应用程序处于事件状态(例如 notepad.exe),则隐身 session 激活成功。 ShellExecuteExCreateProcess 也会出现相同的行为。在 Process Explorer(来自 sysinternals)中观察,很明显 chrome.exe 在必要时 fork 子进程,然后自行终止。这使得拦截 hProcess 或 processId 以最终调用 SetActiveWindow 变得困难。

关于c++ - 使用 ShellExecute 打开 URL - C++ 中的 SW_SHOW MAXIMIZED 非事件窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16558816/

相关文章:

vbscript - VBScript执行成功后如何关闭CMD提示窗口

c++ - XMMatrixMultiply 与使用 * 运算符

c++ - char、unsigned char 和signed char 的 C/C++ 底层表示

jquery - Chrome 添加 cssClass 到 HTML 元素

javascript - 修改 Chrome 自带的 V8 JavaScript 引擎

delphi - 替换当前exe的建议

c++ - 使用循环在 C++ 中移动 Sprite (SFML)

c++ - 这个返回本地字符数组的遗留代码不是错误的吗?

c# - 图片在 Chrome 上工作正常,但在 IE 上不行

c++ - ShellExecute(和 ShellExecuteEx)对我的 URL 不做任何事情