在进行一系列操作之前,我们需要采集到微信中的联系人和群聊信息
软件运行效果演示
接下来我们如何采集到微信中的联系人列表呢?
(1)找到通讯录按钮UI元素执行点击操作。
(2)找到联系人面板并执行面板滚动操作
(3)滚动过程中获取面板List对象中的ListItem项中的各个子元素
(1)找到通讯录的按钮元素,发送点击事件将通讯录面板置为选中状态
编辑
通过UI元素路径查找到了通讯录UI对象,并执行点击事件。
private void ClickContacts()
{
//通过XPATH找到通讯录按钮
var ele = UI_WX_Window.Current.Find("/Pane[2]/Pane[1]/Button[3]");
//发送点击事件
UI_WX_Window.Current.ClickElement(ele);
}
/Pane[2]/Pane[1]/Button[3]是XPath表达式,等于通讯录按钮在窗体中的路径。
然后发送点击事件,将联系人面板展示出来。
(2)当通讯录面板置为焦点后,微信的联系人信息全部在一个List滚动面板中。
我们通过XPATH方式找到联系人List面板的对象。
var list = UI_WX_Window.Current.Find("/Pane[2]/Pane[2]/Pane[2]/Pane/List");
接下来我们通过以下代码获取当前可视区域的联系人
//获取当前可视区域的联系人
private void GetWXContact()
{
UI_WX_Window.Current.Focus();
var list = UI_WX_Window.Current.Find("/Pane[2]/Pane[2]/Pane[2]/Pane/List");
if (list != null)
{
//获取联系人面板中所有的子控件
var child = list.FindAllChildren();
//遍历控件数
foreach (var item in child)
{
var wxName = item.Name;
if (!Contacts.Contains(wxName) && wxName != "新的朋友" && wxName != "公众号")
{
Contacts.Add(wxName);
Log.WXLog.Current.Log(wxName);
}
}
}
}
将联系人List面板中的子控件全部遍历出来并将ListItem中的联系人获取出来。
执行完代码后我们会发现如果我们的联系人面板出现滚动条后,遍历出来的控件只能获取到窗体视觉区域内的联系人。那么我们需要控制滚动条自动滚动,并循环调用GetWXContact()方法来获取联系人。
//获取联系人面板
var list = UI_WX_Window.Current.Find("/Pane[2]/Pane[2]/Pane[2]/Pane/List");
if (list != null)
{
//开启一个线程控制联系人滚动面板进行滚动
Thread th = new Thread(new ThreadStart(() =>
{
int i = 0;
while (true)
{
//获取滚动面板的视图
var contactScroll = list.Patterns.Scroll.Pattern;
//VerticalViewSize为当前可视区域在整个滚动面板滚动区域高度中的比例
var scroll = contactScroll.VerticalViewSize * i;
if (scroll > 0)
{
//如果滚动比例达到100%设置为1
scroll = 0;
}
//使用flaui组件将滚动面板的视图设置到滚动的位置
contactScroll.SetScrollPercent(1, scroll);
//滚动完成后在继续获取联系人
GetWXContact();
i++;
}
}));
th.Start();
}
通过上述的代码就能将我们微信中的联系人和群信息全部采集出来!
因为文章所表达的意思可能无法满足每一位阅读需求,需要源码或者支持请联系作者QQ 978124155
标签:滚动,C#,微信,联系人,PC,UI,Pane,面板 From: https://www.cnblogs.com/lichao7314/p/17805325.html