我正在编写一个小的实用程序来操作窗口,我想做的是一次将两个窗口带到前台,我查了一下文档,有一个API,SetForegroundWindow。
如果我只调用一次,它就可以工作。连续两次调用后,它无法按预期工作。当我单击任务栏中的图标,然后单击另一个图标时,我期望的是这种行为。代码看起来像这样,
SetForegroundWindow(hwnd1);
SetForegroundWindow(hwnd2);
为什么不起作用?我应该如何获得预期的行为。
答案 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。