C#通过UI Automation 获取QQ聊天窗口的聊天记录的疑问

qq_29791765 2017-03-27 05:08:09
如图所示,通过inspect.exe可以找的到QQ聊天记录,

1:聊天窗口消息区,AutomationElement的Name值为“消息”;
2:此处是聊天记录内容。
C#程序中可找到外层聊天窗口的AutomationElement对象,但通过该对象找不到消息区


AutomationElement aeTop = AutomationElement.RootElement; //找到桌面根元素
AutomationElement aeForm = aeTop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "XXXX交流群")); //找到XXXX交流群的聊天窗口
AutomationElement aeMessage= aeForm .FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "消息")); //找不到消息区,aeMessage值为空

通过AutomationElement的两个静态方法(1.通过指定点找到AutomationElement;2.通过当前获得焦点找到AutomationElement)也不能获取到消息区的AutomationElement对象,结果获得了聊天窗口的AutomationElement对象
注:两个方法的指定点和当前焦点都已经指向消息区位置了。

AutomationElement focusedElement = AutomationElement.FocusedElement; //获取当前焦点AutomationElement元素
AutomationElement pointElement= AutomationElement.FromPoint(new System.Windows.Point(868, 346)); //获取指定点处AutomationElement元素

本人认为应该是TX对其做了保护限制,不知道该如何解决 。有没有做过类似开发的大神指点一下小弟。
...全文
1735 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
慧眼识狗熊 2017-09-04
  • 打赏
  • 举报
回复
激活窗体,模拟按键tab,定位到消息区,模拟按键全选,复制,搞定。
cyg17173 2017-09-04
  • 打赏
  • 举报
回复
马克,好感兴趣的话题,大神们多指点下。
weixin_39532039 2017-09-03
  • 打赏
  • 举报
回复
引用 2 楼 stherix 的回复:
如果用IAccessable接口是可以取到qq窗口的聊天记录的 只不过只能取到整个聊天窗口的全部内容
很感兴趣,能指点下吗?
stherix 2017-03-29
  • 打赏
  • 举报
回复
如果用IAccessable接口是可以取到qq窗口的聊天记录的 只不过只能取到整个聊天窗口的全部内容
菜鸟的挣扎 2017-03-28
  • 打赏
  • 举报
回复
对象有此方法,就说明是可用的(不然写此方法是吃撑着不成?),只是用得不对罢了
根据UIAutomation封装了很多自定义方法 现在只需要实例化之后 直接调用方法即可完成。比如单击某个按钮,现在只需要直接调用ClickElement,非常实用。 ClickElement 单击指定的自动化元素 DisselectAllDataGridRow 不选中所有行 DisselectDataGridRow 不选中特定的某一行 FocusWindow 获取窗口焦点 GetAllElement 获取指定父自动化元素下的所有激活的控件 GetAllElementDetails 获取指定自动化元素下的详细信息包括AutomationID,ControlType以及Name GetAllMenus 获取所有菜单项 GetAllSubMenus 获取某个菜单下的所有子菜单项 GetColumnsFromGridLine 获取指定行的所有列 GetColumnValuesFromGridLine 获取行的每一列数据 GetControlType(AutomationElement) 获取制动自动化元素的控件类型 GetControlType(TypeOfControl) 获取UIAutomation的控件类型 GetDocumentText 获取document控件的值 GetElementByID 获取父自动化元素下指定元素控件ID的引用 GetElementByName 获取父自动化元素下的指定子元素的引用 GetElementsByControlType 获取父自动化元素下的特定类型的所有自动化元素 GetGridLinesFromDataGrid 获取网格控件的全部行元素的引用 GetHeaderFromDataGrid 获取指定网格控件的标题栏引用 GetMenuBar 获取菜单栏控件 GetMenuByName 通过特定的名称去获取菜单UI自动化元素 GetName 获取指定自动化元素的名称 GetSubMenuByName 获取主菜单下的指定子菜单项的引用 GetValue 获取指定自动化元素的值 GetWindowByName(String) 获取desktop下的指定窗口名称的子UI自动化元素 GetWindowByName(String, AutomationElement) 获取特定父UI自动化元素下的制定窗口名称的子UI自动化元素 GetWindowList() 获取当前桌面根下所有的UI自动化元素下 GetWindowList(AutomationElement) 获取特定父UI自动化元素下的所有窗口的名称 RefindMainApplication 重新获取desktop下的指定窗口的自动化元素引用 SelectAllDataGridRow 选中所有行 SelectDataGridRow(AutomationElement) 选中特定的某一行 SelectDataGridRow(AutomationElement, Boolean) 将特定的DateGridRow加入选中项中 SelectValueInComboBox 从下拉框中选中指定值的项 SelectValueInListBox 从列表中选中指定值的项 SetValue 给予指定自动化元素赋值 以上的方法还不是很完善 正在完善中。如果有什么意见和建议,请发送邮件获取 chenxu7601257@qq.com 如果你看了这个帮助文件之后觉得有用的,请发邮件获取,我将把dll文件给你。谢谢。

111,102

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧