如何防止Windows桌面热键聚焦

时间:2017-12-11 13:58:51

标签: windows winapi

我尝试创建一个程序,将活动窗口放在屏幕的左上角。我目前使用GetForegroundWindow并将其移至SetWindowPos

当我打开Windows资源管理器并双击我的程序时,这是有效的。然后它左上角移动资源管理器。

问题是:如何使用热键进行此操作。我试图在桌面上放置我的程序的链接,然后分配一个快捷方式,例如CTRL + SHIFT + 1。 当我现在打开Windows资源管理器并使用我的热键时,资源管理器不会移动,它会失去焦点。似乎热键将运行程序(它本身不会创建窗口)并使其成为前景窗口。

我如何实现我想要的目标,是否有一种方法可以让我的程序不关注(如果这是正在发生的事情)或者是否可以通过Win API找到以前活动的窗口?

1 个答案:

答案 0 :(得分:1)

允许

GetForegroundWindow返回NULL。

我建议您实际创建一个小的1x1像素窗口,然后在激活此窗口时隐藏它并等待一个小循环(超时),直到GetForegroundWindow返回其他内容。

因为任务栏和其他shell窗口可以有焦点,所以你应该确保返回的HWND看起来像" normal"验证窗口至少包含WS_CAPTIONWS_VISIBLE样式(而不是WS_MINIMIZED)。

如果你想处理前景窗口不是"正常"应用程序窗口你可以回退到使用EnumWindows找到合适的窗口,但在检查样式时你需要更加严格。您不希望在永远在线的工具窗口等上执行操作。