关于 CoreDll.dll 里面的API:FindWindow

Posted on 2010-11-10 01:02  Yaping Xin  阅读(1066)  评论(0)    收藏  举报

最近在做Windows Mobile 6.1/6.5的UI Automation,其中涉及到一个很常用的API:FindWindow

MSDN上的链接如下:

http://msdn.microsoft.com/en-us/library/aa929233.aspx

Syntax:

这是个很简单的API,我所要和您分享的经验是:

一、中文问题

我在.Net中用PInvoke封装它,曾经遇到过英文标题的窗体能够找到、中文标题的窗口无法找到的问题,后来加上了 CharSet = CharSet.Unicode 的属性,完美解决。

如下:

二、 lpClassName 与 lpWindowName 都相同的窗体,调用 FindWindow 查找会失败

这是最近在 Windows Mobile 6.5 系统上发现的一个现象,其余版本尚未检验。例如,有3个窗体的ClassName都是Dialog,WindowName都是“电话”,如果你调用FindWindow("Dialog", @"电话"),得到的结果是 NULL,GetLastError得到的是ERROR_INVALID_HANDLE。

目前我尚无很好的解决办法,唯一能做的就是枚举出所有窗体,然后根据窗体的Handle查找其ClassName、WindowName,看看哪些符合ClassName=="Dialog"、WindowName=="电话",然后再通过筛选出来的窗体是否含有我期望的Controls来判断究竟哪一个窗体才是我真正想要的。

各位有什么好办法没有,请赐教,多谢!