大家应该都知道在Windows 8以上引入了一个新的概念叫做窗口段 普通的窗口运行于ZBID_ DESKTOP 级上 ,这导致我们的窗口Z序无法以任何常规方式穿过更高级别的系统窗口,但幸运的是Windows提供了一个辅助应用技术 ,它允许我们通过正常的方式将自己窗口的窗口段提升到最高级别,也就是ZBID_UIACCESS.
如何做到
要做到这里我们首先需要在应用清单文件中对应的位置加入UiAccess=true
Vs 2015可以通过进入项目设置 链接器 清单文件 绕过UI保护设置来设置 。
UiAccess的强大之处已经足以让我们概括系统中的绝大部分窗口,但同时对于同级别的辅助应用程序来说窗口实际谁上谁下仍然决定于谁是活动窗口,那么我们可以使用常规置顶的方法在“耍一个无赖 ”.
各位应该都知道BringWindowToTop是一个Windows API,它提供了在同一窗口段内将非Z序顶部窗口置顶的的一个途径,听到这里相信各位已经想出了一个办法 以下是我的解决办法
//创建窗口时
HWND hWnd=CreateWindow(SomeArgs);
UpdateWindow(hWnd);
ShowWindow(hWnd);
SetTimer(hWnd,1,1,NULL);
//窗口过程中
switch(msg){
case WM_TIMER:
BringWindowToTop(hWnd);
break;
//SomeCode
}
你应该看出来了,在这段代码里我通过设置一个计时器并在计时器的处理过程中不断调用 BringWindowToTop,事实证明效果还挺好。
在Windows 10中 要让程序获得UiAccess特权我们需要一个数字签名。
对于个人开发者来说获得由受信任的根CA及其下属所签发的数字签名抑或证书可能是困难的,但我们如果是在自己的计算机上使用则可以使用 测试签名,我们也可以称为自签。
可见这篇文章 创建自签名证书, 对exe文件进行数字签名_exe签名_宇龍_的博客-CSDN博客创建自签名证书,对exe文件进行数字签名https://blog.csdn.net/Think88666/article/details/125947720将自己可执行文件的签名绑定好之后,我们还需要一步操作。
将文件复制到C:\Program Files\或C:\Program Files(x64)\下的一个子目录,自行创建也可。
最后,将证书文件添加到受信任的根证书目录。
效果
VS 任务管理器
VS 开始菜单
VS 语音输入
VS 切换桌面
VS alt+tab任务视图
VS 屏幕键盘