当前位置: 代码迷 >> C# >> 请问FindWindowEx的用法
  详细解决方案

请问FindWindowEx的用法

热度:101   发布时间:2016-05-05 02:47:47.0
请教FindWindowEx的用法
本帖最后由 Duohai 于 2015-08-14 14:56:08 编辑


我的代码是这样写的,但根本获取不到,这个问题折腾了几天都没解决,请求高手相助。


IntPtr ptrTaskbar = FindWindow(null, "AnyDesk");
 if (ptrTaskbar != IntPtr.Zero)
 {
    IntPtr childHwnd = FindWindowEx(ptrTaskbar, IntPtr.Zero, null, "新建连接");
     if (childHwnd != IntPtr.Zero)
       {
          IntPtr childHwnd1 = FindWindowEx(childHwnd, new IntPtr(0), "ad_group#11", null);
           if (childHwnd1 != IntPtr.Zero)
             {
               IntPtr childHwnd2 = FindWindowEx(childHwnd, new IntPtr(0), "Static", "工作台密码更改...");
              }
         }
}


------解决思路----------------------
请问你是哪一步的句柄没有获取到?也许是那个...字符有问题,你可以直接在即时窗口中试的,很容易就能试出来,还有补充一句,C#有专门的UI操作库UI Automation,简单易用,功能强大,配合UISpy工具,几乎是没有不能干的
------解决思路----------------------
通常这种情况下
在你没有完成期望调用结果的函数下面

Console.WriteLine(new Win32Exception(Marshal.GetLastError()).Message);

直接手打的代码 估计没有代码提示 估计有拼写错误
看看 为什么没有找到
------解决思路----------------------
引用:
通常这种情况下
在你没有完成期望调用结果的函数下面

Console.WriteLine(new Win32Exception(Marshal.GetLastError()).Message);

直接手打的代码 估计没有代码提示 估计有拼写错误
看看 为什么没有找到

哦 对了 你的在
[dllimport("user32.dll",SetLastError = true)] 才能抓取到 错误码
------解决思路----------------------
有可能是ad_group#11字符不匹配,你可以换种方法,例如取第5个窗体
------解决思路----------------------
引用:
Quote: 引用:

有可能是ad_group#11字符不匹配,你可以换种方法,例如取第5个窗体


不好意思,没有明白你的意思?

就是说采用枚举窗体的方式,例如使用GetWindow或EnumChildWindows函数遍历到指定窗体序列号的窗体即可,像你的那个ad_group#11就是第5个
  相关解决方案