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

时间:2014-12-19 18:36:44

标签: c++ winapi

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

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。

1 个答案:

答案 0 :(得分:5)

正如Remy Lebeau所指出的那样,SetForegroundWindow()概述了将前景设置为前景的要求。 pictView玩得很脏,所以我used dirty tricks too

LockSetForegroundWindow(LSFW_LOCK);
从控制台应用程序执行的

阻止了pictView窃取其焦点。现在一切都很顺利。