山寨版很好很强大:

简单介绍一下,这是我用过的,获取屏幕的四个顶点(具体检测的时候可以向屏幕的中心剪一个像素,譬如检测 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,代码如下:

    APPBARDATA abd;  memset(&abd, 0, sizeof(abd));  // Specify the structure size and handle to the appbar.  abd.cbSize = sizeof(APPBARDATA);  abd.hWnd = hwndAccessBar;  abd.uCallbackMessage = MSG_APPBAR_MSGID;  !::SHAppBarMessage(ABM_NEW, &abd);  

注意MSG_APPBAR_MSGID这个,这是你自己定义的消息ID,当有全屏创建或者取消的时候,会给句柄为hwndAccessBar的窗口发送消息ID为MSG_APPBAR_MSGID的消息,具体到全屏消息,此时WPARAM为ABN_FULLSCREENAPP,而LPARAM则能够判断当前是有窗口全屏了还是有窗口取消全屏了,(BOOL) lParam为TRUE表示有窗口全屏了,而(BOOL) lParam为FALSE则表示有窗口取消全屏状态了。代码如下:

    LRESULT CWinHook::WindowProc(UINT msg, WPARAM wp, LPARAM lp)  {  if (MSG_APPBAR_MSGID == msg)  {  switch((UINT)wp)  {  case ABN_FULLSCREENAPP:  {  if (TRUE == (BOOL)lp)  {  TRACE(TEXT("一个窗口全屏了/n"));  KAppBarMsg::m_bFullScreen = TRUE;  }  else  {  TRACE(TEXT("一个窗口取消全屏了/n"));  KAppBarMsg::m_bFullScreen = FALSE;  }  }  break;  default:  break;  }  }  return CSubclassWnd::WindowProc(msg, wp, lp);  }  

附注:后来发现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

判断当前窗口是否是全屏的山寨版和官方版相关推荐

  1. 【温故而知新-Javascript】窗口效果 (全屏显示窗口、定时关闭窗口)

    1.全屏显示窗口 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  2. Q窗口操作函数(窗口最大化,全屏,隐藏最大化最小化按钮)

    Qt窗口中的一些小技术总结 //Qt主窗口没有最小化,最大化按钮且最大化显示  int main(int argc, char *argv[]) { QApplication a(argc, argv ...

  3. java窗口如何定时关闭_[Java教程]【温故而知新】Javascript窗口效果 (全屏显示窗口、定时关闭窗口)_星空网...

    [温故而知新]Javascript窗口效果 (全屏显示窗口.定时关闭窗口) 2014-10-30 0 1.全屏显示窗口 全屏显示窗口 2.定时关闭窗口 定时关闭窗口 来源:<HTML.CSS.J ...

  4. Qt 窗口最大化,全屏无边框显示

    //窗口最大化 setWindowState(Qt::WindowMaximized); 用这个要比用showMaximized好 //全屏无边框显示 setWindowState(Qt::Windo ...

  5. CAD显示全屏控件(网页版)

    主要用到函数说明: MxDrawXCustomFunction::Mx_FullScreen 全屏显示控件,详细说明如下: 参数 说明 int iFull = 2 0: 不完屏,1:全屏,2:自动切换 ...

  6. java 俄罗斯方块窗口_[代码全屏查看]-java 俄罗斯方块

    [1].[代码] [Java]代码 package com; import java.awt.Color; import java.awt.Graphics; import java.awt.even ...

  7. [ubuntu] tmux 窗口不是全屏

    具体问题:https://unix.stackexchange.com/questions/20878/tmux-not-scaling-to-fill-the-window 我使用 windows ...

  8. 如何在windows下使DOS窗口最大化(全屏)

    运行--->cmd 在DOS窗口下输入命令 wmic 然后单击最大化后 这时DOS窗口变成最大化了,就这么简单 在DOS窗口下输入命令 quit 退出wmic 效果如:

  9. android全屏命令,微信全屏表情指令2020安卓版-2020微信满屏幕表情指令软件v7.0.19 清爽版-007游戏网...

    2020微信满屏幕表情指令软件,是本站独家才有的一款微信表情代码APP,无需进行特别的技巧,就可以让你们在平常或者过年的期间正常的使用,享受个性化的表情带来的无限互动乐趣. 微信表情雨2020有效词有 ...

最新文章

  1. 汇编语言w3c_w3cschoolc语言教程
  2. spring IOC和DI
  3. 某种密码(password.*)
  4. python策略模式_设计模式(python实现):策略模式
  5. linux centos7开启IP转发、路由转发解决docker 端口映射 及外部无法访问问题
  6. VTK:Dijkstra 图形测地线路径用法实战
  7. redis集群搭建踩坑笔记
  8. 前端页面内含外显相关知识
  9. instagram架构_如何为亚马逊,Instagram,Zalando和天猫生成产品图像
  10. leetcode1576 (2022.1.5)
  11. 三星Galaxy A90 5G版通过认证:有望成为最便宜的5G手机
  12. java ordered list_Java - JSON对象和ListOrderedMap问题
  13. 偏差(bias)、方差(variance)和噪音(noise)
  14. MongoDB CRUD命令操作
  15. [转载][翻译]Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[1]
  16. 1.maven下仅shiro框架对shiro的测试使用
  17. tomcat 7配置ssl教程
  18. VS2017的C++开发心得(一)VS的项目创建
  19. JAVA自行车类代码_你好 请问你还有 java Web编写的自行车租赁管理系统源代码么...
  20. python泰坦尼克号数据分析_Python实战—泰坦尼克号生还者数据分析

热门文章

  1. 在ASP.NET中面向对象的编程思想
  2. mplayer slave 模式文档翻译
  3. STL泛型编程之map映照容器
  4. 服务器上出现应用程序错误。此应用程序的当前自定义错误设置禁止
  5. enum枚举类型的范例
  6. 牛客多校第五场 G subsequence 1 最长公共子序列/组合数
  7. 【转】C#、面向对象、设计模式学习
  8. 那些年我们跳过的 IE坑
  9. CodeForces 877C
  10. base——JRE和JDK的区别【转】