判断当前窗口是否是全屏的山寨版和官方版
来源:互联网 发布:js调用php接口 编辑:程序博客网 时间:2024/06/05 16:12
山寨版很好很强大:
简单介绍一下,这是我用过的,获取屏幕的四个顶点(具体检测的时候可以向屏幕的中心剪一个像素,譬如检测 1,1而不是0,0)所在窗口的句柄,如果四个句柄都相同,则认为是全屏状态,其实有个问题,有些程序全屏的时候,还会有窗口弹出来,典型的像播放软件,全屏的时候,下面还有一个工具栏,这个工具栏和后面的播放窗口是不同的,所以检测失败了。对这种方法加强就是,获取四个点窗口所在的进程PID,如果PID想同,则认为是全屏,但是仍然有问题,检测explorer的时候就直接认为是全屏了,呵呵,所以要过滤。总之实现简单,但是不准,不推荐使用。
官方的推荐做法:
注册一个Appbar(桌面工具栏)是类似微软视窗系统的任务条的窗口。它紧靠屏幕边缘,典型的桌面工具栏包括快速访问其他应用程序和窗口的按钮。系统会防止其他应用程序使用被appbar占用的区域。在任何时刻桌面都可以同时共存多个appbar。
使用的API:
SHAppBarMessage
WINSHELLAPI UINT APIENTRY SHAppBarMessage(
DWORD dwMessage,
PAPPBARDATA pData);
这个API可以向系统发送一个appbar message(也就是dwMessage,有很多消息,可以查阅MSDN),然后系统通过pData返回你想知道的信息,这里我们主要用这个API来注册一个新的appbar。这里还需要关注的是APPBARDATA这个结构体。
检测全屏的具体实现。
这里要先通过调用SHAppBarMessage(ABM_NEW, &abd)来注册一个appbar,代码如下:
注意MSG_APPBAR_MSGID这个,这是你自己定义的消息ID,当有全屏创建或者取消的时候,会给句柄为hwndAccessBar的窗口发送消息ID为MSG_APPBAR_MSGID的消息,具体到全屏消息,此时WPARAM为ABN_FULLSCREENAPP,而LPARAM则能够判断当前是有窗口全屏了还是有窗口取消全屏了,(BOOL) lParam为TRUE表示有窗口全屏了,而(BOOL) lParam为FALSE则表示有窗口取消全屏状态了。代码如下:
附注:后来发现vista下面没有XP下灵敏,不知道怎么回事,vista下偶尔会失败,很奇怪。
参考MSDN2005:
APPBARDATA Structure
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/structures/appbardata.htm
ABM_NEW Message
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/messages/abm_new.htm
ABN_FULLSCREENAPP Notification
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/shell/reference/messages/abn_fullscreenapp.htm
- 判断当前窗口是否是全屏的山寨版和官方版
- [转载]判断当前窗口是否是全屏的山寨版和官方版
- 判断当前窗口是否是全屏的山寨版和官方版
- 判断当前窗口是否是全屏
- 判断当前窗口是否是全屏
- 自己写的判断当前活动窗口是否是全屏状态
- 判断当前是否有窗口全屏
- 判断某个窗口是否是活动窗口(当前正在使用、操作的窗口)
- js判断当前窗口是否是顶级窗口
- 如何判断当前是否全屏程序
- android如何判断当前页是否全屏
- Android 判断当前的界面是否是桌面的方法
- Android 判断当前的界面是否是桌面的方法
- 判断窗口是否是活动窗口
- ios--笔记--判断当前屏幕是否是iphone5的尺寸
- Android 判断当前线程是否是主线程的方法
- 如何判断当前的上下文是否是一个列表
- Android判断当前线程是否是主线程的方法
- 日本政局之怪现状
- 经典计算机论文 转载
- 一个学习C小弟的独白(各位大哥大姐顶一下额~)(1)
- GCC链接中的库依赖,调整链接时库文件的顺序
- Java swing console
- 判断当前窗口是否是全屏的山寨版和官方版
- SQL server组合查询+sql常用函数
- 对一段字符串取反
- 子网掩码的计算与划分详解
- A Day in the Life of IT
- c#隐藏/显示Windows任务栏
- APT and Dpkg 快速参考表
- linux终端访问
- 关于n&(n-1)=0时,n是2的幂数的证明