下你所需,载你所想!
汇集开发技术源码资料

比WS_EX_TOPMOST更顶层,屏幕截图或者窗口标记工具可用

:15.523KB :1 :2022-08-21 15:45:59

部分简介

* 获取当前屏幕的HDC,直接绘制你的图形
* 创建一个无边框窗口,然后在窗口上面绘制

然而第一种方案对于动态变化的窗口适应性不太好,容易产生残影,另外还需要考虑DPI缩放,比较复杂。第二种在以前版本的Windows下没问题,但从Windows8以后,就需要面对新的情况:窗口拿不到最高Z序。

普通的应用无论是否使用总在最前属性(或WS_EX_TOPMOST),窗口的Z序总低于一些特定的程序。

可以在这篇文章中找到一些解释
简单的说,微软从Windows8开始,引入了其他窗口段,这导致了你窗口的Z序始终低于设置过其他ZBID段的窗口。
要让你的窗口Z序最前,除了文中提到的CreateWindowInBand/SetWindowBand外(调用成功的条件过于苛刻),还有一个方法,就是启用UIAccess。启用UIAccess后,设置窗口总在最前,即可让你的窗口位于最高Z序:ZBID_UIACCESS。

根据微软的文档,要使用UIAccess也需要很多条件,参见这里

此模块则使用不那么正规的方法,尝试获取UIAccess权限。为了达成这一目的,程序需要管理员权限,不过这比官方提到的条件更宽松。

比WS_EX_TOPMOST更顶层,屏幕截图或者窗口标记工具可用

热门推荐

相关文章