儿童过程窃取焦点.如何在不打扰用户的情况下取回它?

Jan*_*roň 4 c++ winapi

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

CreateProcess(NULL, command, NULL, NULL, TRUE, 0, NULL, NULL, &in, &out);
Run Code Online (Sandbox Code Playgroud)

哪里

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

我试着给pictView一些时间,然后好好把焦点放回去

Sleep(1000);
SwitchToThisWindow(hwnd,TRUE);
Run Code Online (Sandbox Code Playgroud)

我得到了焦点(光标在我的控制台中再次闪烁),但任务栏中的图标闪烁几次,直到我按下Alt + Tab键才允许输入.

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

有没有办法如何在不用Alt + Tab打扰用户的情况下重新获得焦点?

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

Jan*_*roň 5

正如Remy Lebeau所指出的,SetForegroundWindow()概述了将前景设置为前景的要求.pictView玩得很脏,所以我也使用了肮脏的技巧:

LockSetForegroundWindow(LSFW_LOCK);
Run Code Online (Sandbox Code Playgroud)

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