子进程窃取焦点.如何在不打扰用户的情况下将其取回

Child process steals focus. How to get it back without bothering user?

本文关键字:用户 情况下 打扰 焦点 子进程      更新时间:2023-10-16

>我从控制台应用程序创建了子进程

CreateProcess(NULL, command, NULL, NULL, TRUE, 0, NULL, NULL, &in, &out);

哪里

  • command是我pvw32 img.jpg运行的应用程序的命令行(pictView 显示一些图像(。
  • in是一个 STARTUPINFO 结构(我尝试STARTF_USESHOWWINDOW标志,但运气不好,pictView 通过它的一些进程窃取了焦点(

我试图给pictView一些时间,然后请把焦点收回来

Sleep(1000);
SwitchToThisWindow(hwnd,TRUE);

得到了焦点(光标在我的控制台中再次闪烁(,但任务栏中的图标闪烁了几次,并且在我点击 Alt+Tab 之前不允许输入。

我也试着设置z顺序,启动pictView最小化,甚至暂停它,但他就是不想轻易放弃。如何重新获得焦点的唯一方法是杀死pictView。

有没有办法在不打扰用户的情况下恢复焦点 Alt+Tab?

注意:simpView 没有焦点窃取问题,但出于性能原因,我想继续使用 pictView。

正如 Remy Lebeau 指出的那样,SetForegroundWindow(( 概述了将前景设置为前台的要求。 pictView玩得很脏,所以我也用了肮脏的把戏:

LockSetForegroundWindow(LSFW_LOCK);

从控制台应用程序执行阻止了 pictView 窃取其焦点。现在一切顺利。