4月16日的时候写了一篇检测当前是否有窗口处于全屏状态的短文,判断当前窗口是否是全屏的山寨版和官方版(http://blog.csdn.net/magictong/archive/2009/04/16/4085477.aspx),后来发现所谓的“官方版”也是有局限性的,因为这种方法是靠系统不停的发送一个全屏还是非全屏状态来决定是否有全屏窗口存在的,但是如果你正在使用QQ影音看电影,全屏了,这是系统发送了一个全屏的消息给你的程序,你知道全屏了,但是过了一会,后台有程序被定时器激活,弹了出来,也许不能显示在前台,但是系统会把这个窗口的状态(非全屏)进行广播,你的程序知道,哦,不是全屏了,这时就出错了,因为此时QQ影音还在那全屏放电影呢。
解决这个问题后来和组里的一个同事讨论下,借鉴以前代码处理方案,使用枚举窗口的方法,EnumWindows,这个API需要传入一个回调函数,枚举到的所有窗口句柄会依次传给回调函数,然后你要实现一个检测整个屏幕大小的函数,对枚举到的窗口大小和屏幕大小进行比较。
要注意的问题:有个永久全屏的窗口,Explorer,要过滤;要考虑多显示器的情况。
代码就不贴了,比较简单。