为什么连续调用SetForegroundWindow无效?

时间:2019-11-11 23:33:00

标签: windows winapi

我正在编写一个小的实用程序来操作窗口,我想做的是一次将两个窗口带到前台,我查了一下文档,有一个API,SetForegroundWindow。

如果我只调用一次,它就可以工作。连续两次调用后,它无法按预期工作。当我单击任务栏中的图标,然后单击另一个图标时,我期望的是这种行为。代码看起来像这样,

SetForegroundWindow(hwnd1);
SetForegroundWindow(hwnd2);

为什么不起作用?我应该如何获得预期的行为。

1 个答案:

答案 0 :(得分:1)

API的工作方式与广告一样。来自documentation

  

将创建指定窗口的线程带入前台并激活该窗口。

换句话说,它更改了前台线程。给定您的用例,这意味着也要更改前台流程。

进一步,API列出了一些restrictions

  

系统限制可以设置前景窗口的进程。仅当满足以下条件之一时,进程才能设置前景窗口:

     
      
  • 该过程是前台过程。
  •   
  • [...]
  •   

第一次成功调用SetForegroundWindow之后,调用过程不再是前台过程。后续呼叫将失败(除非您已请求特殊权限)。


必读:Foreground activation permission is like love: You can’t steal it, it has to be given to you