我使用这个函数在 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 激活成功。 ShellExecuteEx
和 CreateProcess
也会出现相同的行为。在 Process Explorer
(来自 sysinternals)中观察,很明显 chrome.exe 在必要时 fork 子进程,然后自行终止。这使得拦截 hProcess 或 processId 以最终调用 SetActiveWindow
变得困难。
关于c++ - 使用 ShellExecute 打开 URL - C++ 中的 SW_SHOW MAXIMIZED 非事件窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16558816/