如何使用ShellExecuteEx()而不会窃取开启窗口的焦点

时间:2015-10-07 07:05:02

标签: winapi

我正在尝试通过我的应用程序打开浏览器,但我不希望它在前台运行并从我的应用程序中窃取焦点。

代码:

case WM_COMMAND:
{
    SHELLEXECUTEINFO ShExecInfo;
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = NULL;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = L"open";
    ShExecInfo.lpFile = L"http://www.microsoft.com";
    ShExecInfo.lpParameters = NULL;
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_HIDE;
    ShExecInfo.hInstApp = NULL;
    ShellExecuteEx(&ShExecInfo);
    SetForegroundWindow(hwnd);
}
return 0;

在我的应用程序中,有一个按钮发送命令消息以执行打开代码,但我的应用程序转到后台,浏览器到达前台。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我建议您使用CreateProcess()启动浏览器,而在初始化的STARTUPINFO结构中,使用STARTF_USESHOWWINDOWdwFlags中的wShowWindow,一定要包含SW_SHOWNOACTIVATE标志。这应该允许进程启动但不会成为活动窗口。