-
十一 4
我们大家都知道FindWindow函数用来查找一个窗口,这个窗口可以是可见的也可以是不可见的,用法也很简单:
HWND FindWindow(ClassName,Caption:String);
比如说,查找游戏“扫雷”的窗口,用FindWindow(nil,'扫雷');就可以了,如果找到就会返回该窗口的句柄,否则返回0。
嗯,我们延伸一下,如果有多个窗口,比如我开了5个扫雷,那么使用FindWindow只会找到一个窗口,那究竟是哪个窗口被找到呢?
如果你熟悉CSS,那么你应该知道在CSS中一个z-index,他表示层次关系,这个数值越大表示越靠近顶层,类似的在Photoshop软件中也有图层的概念,他们是一样的。
在桌面窗口中,类似也有个层的顺序,这里是用z-order来表示的,同样的,数值越大表示越处于顶层窗口,所以,FindWindow所查找的就是位于z-order中最顶层的窗口。
我们如果想查找全部5个“扫雷”窗口该怎么办呢?这就需要利用另外一个函数EnumWindows,来枚举当前所有窗口了。
写个实例代码:
function EnumWindowsProc(hwnd:HWND;lParam:DWORD):boolean; stdcall; var szCaption: array[0..256] of Char;//这个是用来保存找到的标题 begin GetWindowText(hwnd,szCaption,127);//获取标题Caption if length(trim(szCaption))>0 then//表示是有标题的窗口 begin if trim(szCaption)<>'' then if '扫雷'=LowerCase(szCaption) then//中文标题不用转换,如果包含英文字母可以统一一下大小写 SendMessage(hwnd,WM_CLOSE,0,0);//hwnd就是符合的窗口句柄,这里发个消息来关闭该窗口 end; result:=TRUE; end; //调用这个函数:EnumWindows(@EnumWindowsProc,0);
通过以上代码,我们就可以来查找当前所有符合要求的窗口了,比FindWindow要好用的多。


- 评论(0)
发表评论 TrackBack
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。