关于 CoreDll.dll 里面的API:FindWindow

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

 

MSDN上的链接如下:

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

 

Syntax:

HWND FindWindow( LPCTSTR lpClassName, LPCTSTR lpWindowName );

 

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

 

一、中文问题

 

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

 

如下:

 

[DllImport("coredll.dll", EntryPoint = "FindWindow", SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode)] public static extern IntPtr FindWindow(string className, string windowName);

 

二、 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来判断究竟哪一个窗体才是我真正想要的。

 

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


你可能感兴趣的:(windows,api,String,mobile,dialog,电话)