毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> net技术 >> 正文

|ZYCWPF| WINAPI 如何枚举窗体所有控件

更新时间:2013-1-17:  来源:毕业论文

|ZYCWPF| WINAPI 如何枚举窗体所有控件
 private void Button_Click_1(object sender, RoutedEventArgs e)         {             richHandle = IntPtr.Zero;             EnumWindows(EnumFunc, 0);             if (richHandle == IntPtr.Zero)                 return;             Console.WriteLine(Process_ReadRichEditText(richHandle));         }           public bool EnumFunc(IntPtr hwnd, int lParam)         {             if (!IsWindowVisible(hwnd))                 return true; // 不可见                StringBuilder vBuffer = new StringBuilder(256);             GetClassName(hwnd, vBuffer, vBuffer.Capacity);             string name = vBuffer.ToString();             if (vBuffer.ToString() == "TXGuiFoundation")             {                 uint vProcessId;                   GetWindowThreadProcessId(hwnd, out vProcessId);                 var nameid = GetProcessName(vProcessId).ToLower();                 if (GetProcessName(vProcessId).ToLower() == "qq.exe")                 {                     GetWindowText(hwnd, vBuffer, vBuffer.Capacity);                     // 标题中含"聊天中"                      if (vBuffer.ToString().IndexOf("杜老师") >= 0)                     {                         //在这里应该是要找这个窗体里面的控件才对啊?为什么这里是枚举他的子窗口?                         //还有他这里不会进入@EnumChild方法,我想是因为他找不到这个子窗口的原因?                         //那这里怎么来枚举这个窗体的所有控件呢?                          //谢谢                                                 EnumChildWindows(hwnd, @EnumChild, lParam);                         return false;                     }                 }             }             return true;         }

我上面用: EnumWindows(EnumFunc, 0); 方法来得到所有窗体
然后在EnumFunc中判断窗体类型是否为:TXGuiFoundation且进程为"qq.exe"
如果是的话判断QQ聊天窗体的标题是否为有:“杜老师”
如果有的话,我就要“枚举这个窗体的所有控件”,来找到聊天输入框
但是现在,我不知道旧城改造以来“枚举这个窗体的所有控件”

spy++有个树状视图的,可以分层显示子窗口

相当于你的enumchildwindows

如果列不出来,那就是没有了。

如果列出来,看看你代码步入的“路径”是否正确。

发现微软的UIAutomation库果然强大,spy++抓不出来的,用这个能抓出来,我写了个函数,可以正常获取QQ发送框中的内容

public string GetQQEditText()         {             AutomationElement desktop = AutomationElement.RootElement;             AutomationElement QQwindow = desktop.FindFirst(TreeScope.Children, new AndCondition(                     new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window),                     new PropertyCondition(AutomationElement.NameProperty, "对方昵称")));             AutomationElement QQedit = QQwindow.FindFirst(TreeScope.Subtree, new AndCondition(                     new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit),                     new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "编辑")));             return ((ValuePattern)QQedit.GetCurrentPattern(ValuePattern.Pattern)).Current.Value;         }

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。