【问题标题】:ShellExecuteEx shifting focus to previously opened application for short time returning back to .exe againShellExecuteEx 将焦点转移到先前打开的应用程序上,并在短时间内再次返回到 .exe
【发布时间】:2015-12-28 08:52:12
【问题描述】:

我正在使用 ShellExecuteEx(&ShExecInfo) 启动 .exe ,当 .exe 从我的应用程序启动时,窗口焦点会在很短的时间内转移到先前打开的应用程序(如 windows explore)大约 1 秒,之后它返回到.exe。我希望我的注意力应该放在 exe 上,而不是在短时间内访问任何应用程序。

参考代码:

SHELLEXECUTEINFO ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = mainWndHWnd;
ShExecInfo.lpVerb = L"open";
ShExecInfo.lpFile = L"abc.exe";
ShExecInfo.lpParameters = buffer;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOWNA;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);

【问题讨论】:

  • 我试过 ShExecInfo.nShow = SW_SHOWNORMAL;但不能解决我的问题
  • 这取决于你的 abc.exe。检查它是否快速退出。这可能是它立即退出然后 Windows 将焦点移到上一个窗口的情况。
  • 我的exe是一个c#表单应用程序,它会保留很长时间。焦点也会在短时间内转到先前打开的应用程序并立即返回到 exe。当我关闭 exe 时,焦点来到父应用程序,因为它在父应用程序上是模态的。

标签: visual-c++ shellexecute shellexecuteex


【解决方案1】:

如果我理解正确,你打电话给

ShellExecuteEx(&ShExecInfo);

从您的一个应用程序并立即退出它。对吗?

在这种情况下,您正在创建的进程可能尚未启动/初始化,并且 Windows 将焦点设置到某个窗口,因此它会转到先前焦点所在的窗口。

您可能希望在第一个应用程序中等待第二个应用程序启动,例如,使用 WaitForInputIdle() 函数。

【讨论】:

  • 嗨,abc.exe 不会立即退出,它会等待用户的一些输入并对其进行处理,然后退出。焦点来到 exe 但经过一段时间后(通过返回上一个应用程序)
  • 我问的是调用ShellExecuteEx() 的应用程序,而不是创建的abc.exeFIRST 应用程序在调用ShellExecuteEx() 后是否立即退出?那parent application是谁?你能把它们称为 A、B 和 C,然后再解释一下这个场景吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 2021-11-01
  • 1970-01-01
  • 2022-11-04
相关资源
最近更新 更多