Windows Mobile 中,窗口的概念与Win32平台有较大差异.在Win32平台,通常认为是"按钮"等控件的东西,在WM也是窗口.
如附图所示:红色椭圆圈起来的部分都是窗口.正中最大的一个,是File Explorer窗口的用户区;Storage Card那一块是File Explorer的子窗口;Up和Menu不是File Explorer的一部分,是在Z序上位于其上层,并依附于其存在的窗口,而且虽然其在Z序最高层,但不可能是"前景窗口";标题栏也是一个窗口.
为了说明这些,发出几个实验程序:
第一个程序运行后,会在3秒钟后关闭当前前景窗口的子窗口,然后在3秒钟后关闭前景窗口.可以看到子窗口被关闭的现象.
第二个程序会关闭Z序高于前景窗口的窗口,可以看到Up与Menu两个"按钮"变成一片空白,也不能再点击了.
至于右上角的小叉,这也与Win32平台的"关闭"功能不同,点击后,并没有把程序关闭,而只是调整了其Z序,让其Z序低于桌面,"躲藏"在桌面以下,只要改变桌面的尺寸,就能使其现身.
第三个程序就能看到这个现象,60秒后,桌面尺寸的改变会还原,不会损坏系统
根据以上所述可以得知:系统中总是有大量打开的窗口,有些有名字(如File Explorer),有些没有名字(如"Up"键),那么系统中到底有多少窗口是打开的呢?可以用EnumWindows函数枚举一下.
第四个程序进行了一个枚举,会不断用对话框显示当前系统打开的"有名窗口"的标题名,最后统计出有名窗口和无名窗口的数量.这个程序的执行结果也许会让你大吃一惊!(怎么这么多!)
并且,任意新开一个窗口,然后再运行本程序,都很可能会发现"有名窗口"和"无名窗口"增加的数量都不止一个
有了以上的实验及实验中得出的结论,也许大家对WM的"窗口"的概念有了一个与以前不同的认识.也就更容易理解,如何通过窗口禁用的方式,实现整个系统"假死机"状态!
第五个程序就通过枚举并禁用窗口,使得"触摸屏被禁用".这是在加百力发的"禁用触摸屏"一文中提出的想法(http://bbs.pediy.com/showthread.php?t=79976),只是当时回帖不能上传附件,今天就一并上传了.
这个程序要小心实验,最好不在要真机上运行,不然很麻烦.
本贴介绍了自己实验过程中发现的一些WM与Win32不同的特性,可能不全面,也可能有错误的理解.请大家指正!谢谢!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
上传的附件: