首页 > 编程语言 >C#UI自动化实现微信自动搜索聊天文件并发送

C#UI自动化实现微信自动搜索聊天文件并发送

时间:2024-11-17 13:18:04浏览次数:3  
标签:FirstOrDefault wxWindow C# 微信 UI && var ControlType

用到了两个程序包,FlaUI .Core,FlaUI.UIA3,在VS的扩展里可以下载安装这两个程序包,UI自动化是用来实现自动测试程序流程的,减少人工测试的成本。有需要源程序的私信我。

获取微信窗口句柄 

void GetWxHandle()
        {
            var process = Process.GetProcessesByName("Wechat").FirstOrDefault();
            if (process != null)
            {
                ProcessId = process.Id;
            }

        }

检测微信是否登录,并激活微信聊天窗 

 

bool InitWechat()
{
            //根据微信进程ID绑定FLAUI
            Application = FlaUI.Core.Application.Attach(ProcessId);
            if (Application.HasExited)
            {
                MessageBox.Show("请登录微信!");
                return false;
            }
            var automation = new UIA3Automation();
            var windows= Application.GetAllTopLevelWindows(automation);
            //获取微信window自动化操作对象
          
            if (windows.Count()== 0)
            {
                MessageBox.Show("请打开聊天窗口!");
                return false;  
            }
            else
            {
                wxWindow = Application.GetMainWindow(automation);
                if (wxWindow.AsWindow().Patterns.Window.PatternOrDefault != null)
                {
                    //将微信窗体设置为默认焦点状态
                    wxWindow.AsWindow().Patterns.Window.Pattern.SetWindowVisualState(FlaUI.Core.Definitions.WindowVisualState.Normal);
                }
                return true;
            }
         
 }

点击发送按钮,自动搜索聊天记录,并转发给最新发送的人 

  private async void  button1_Click(object sender, EventArgs e)
        {
            var path = textBox1.Text;
            var sendMsg = path.Substring(path.LastIndexOf("\\") + 1, path.Length-path.LastIndexOf("\\")-1);
            var itemName = sendMsg;
            if( !InitWechat())
            {
               return;
            }
                
            if (wxWindow != null)
            {
                if (wxWindow.AsWindow().Patterns.Window.PatternOrDefault != null)
                {
                    //将微信窗体设置为默认焦点状态
                    wxWindow.AsWindow().Patterns.Window.Pattern.SetWindowVisualState(FlaUI.Core.Definitions.WindowVisualState.Normal);
                }
            }
            //await Task.Delay(100);
            var search = wxWindow.FindAllDescendants().FirstOrDefault(s => s.Name == "搜索");
            var sync = SynchronizationContext.Current;
            search.FocusNative();
            search.Focus();
            search.Click();
        
            var text = wxWindow.FindAllDescendants().FirstOrDefault(s => s.Name == "搜索").Parent;
            if (text != null)
            {
                //await Task.Delay(100);
                var txt = text.FindAllChildren().FirstOrDefault(s => s.ControlType == ControlType.Text).AsTextBox();
                txt.Text = itemName;
                await Task.Delay(500);
                var item = wxWindow.FindAllDescendants().ToList();
                wxWindow.FocusNative();
                if (item != null && item.Count > 0 && !string.IsNullOrWhiteSpace(sendMsg))
                {
                    var first =item.FirstOrDefault(s=>s.Parent != null && s.Parent.Name.Contains("@str:IDS_FAV_SEARCH_RESULT")&&!s.Name.Contains("搜索网络结果"));
                    first.FocusNative();
                    first.Focus();
                    first.Click();
                    var automation = new UIA3Automation();
                    var firstWindow= Application.GetAllTopLevelWindows(automation).FirstOrDefault();
                    var childen= firstWindow.FindAllDescendants().Where(t=>t.ControlType==ControlType.Button&&t.Name=="进入聊天").FirstOrDefault();
                    childen.Click();

                    var msgBox = wxWindow.FindFirstDescendant(x => x.ByControlType(FlaUI.Core.Definitions.ControlType.Text)).AsTextBox();
                    msgBox.Text = "";

                    var button = wxWindow.FindAllDescendants().Where(s => s.ControlType == ControlType.Button && s.Name == "发送文件").FirstOrDefault();
                    button?.Click();
                    var fileWindow = Application.GetAllTopLevelWindows(automation).FirstOrDefault();
                    var fileChileWindows = fileWindow.FindAllDescendants();
                    var fileText = fileChileWindows.Where(t => t.ControlType == ControlType.Edit&&t.Name=="文件名(N):" ).FirstOrDefault();
                    var fileButton = fileChileWindows.Where(t=>t.ControlType==ControlType.SplitButton&&t.Name=="打开(O)").FirstOrDefault();
                    fileText.AsComboBox().Value=  path.Substring(0,path.LastIndexOf("."));
                    fileButton?.Click();
                    await Task.Delay(500);
                    var mainChileWindow = Application.GetAllTopLevelWindows(automation).FirstOrDefault();

                   var sendWindow= mainChileWindow.FindAllChildren().FirstOrDefault();
                    var sendButton= sendWindow.FindAllDescendants().Where(t=>t.ControlType==ControlType.Button&&t.Name.Contains("发送")).FirstOrDefault();
                    sendButton?.Click();
                    firstWindow.Close();

              
                }
            }
            ChatListTokenSource.Cancel();
        }

 

 

 

标签:FirstOrDefault,wxWindow,C#,微信,UI,&&,var,ControlType
From: https://blog.csdn.net/qq_39541524/article/details/143830739

相关文章

  • CSP/信奥赛C++语法基础刷题训练(11):洛谷P5743:猴子吃桃
    CSP/信奥赛C++语法基础刷题训练(11):洛谷P5743:猴子吃桃题目描述一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩余的桃子的一半外加一个。第n......
  • CSP/信奥赛C++语法基础刷题训练(12):洛谷P1047:[NOIP2005 普及组] 校门外的树
    CSP/信奥赛C++语法基础刷题训练(12):洛谷P1047:[NOIP2005普及组]校门外的树题目描述某校大门外长度为lll的马路上有一排树,每两棵相邻的树之间的间隔都是......
  • 【课程设计】单片机课程设计之基于STM32的LCD电子钟的设计(LVGL+TFT彩屏)
    零.前置说明 由于本项目使用了LVGL开源框架,建议至少了解一点LVGL,可看前置文章:【LVGL快速入门(一)】LVGL开源框架入门教程之框架移植_lvgl教程-CSDN博客【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)_lvgl框架详解-CSDN博客【LVGL速成】LVGL修改标签文......
  • 挥发性有机化合物(VOCs)排放测试概述
    挥发性有机化合物(VOCs)是一类具有高挥发性的有机化学物质。在日常生活中VOCs常以气体形式长时间存在于空气中,对室内空气质量产生负面影响。长期暴露于高浓度的VOCs可能导致一系列健康问题,如呼吸道刺激、头痛、甚至更严重的健康风险。因此,准确检测和评估VOCs的排放水平对于保护公......
  • Manjaro/Arch用怎么安装天翼云电脑(Ctyun-cloud-desk)?感谢信创,感谢国家
    最近微信出了linux版,用vmware装linux不过瘾,把一台闲置的笔记本装上了ManjaroKDEPlasma,经过一段时间的发展,Linux桌面可用性大大提高。Kindle->KindleMate->Anki这条路在linux下我用Kindle->KindleVocab->Anki这么代替了之后,其他软件都能凑合用,加之用了电信的天翼云电脑后......
  • 【华为OD技术面试手撕真题】84、前 K 个高频元素 | 手撕真题+思路参考+代码解析(C & C+
    文章目录一、题目......
  • MapReduce经典案例————数据去重
    目录一、问题介绍二、实验工具 三、案例实现1.打开idea,单击“file->new->project”,设置项目名称为“Hadoop_test”,在对话框下部的“Advanced Settings”中设置Groupid为“cn.lyy”。​编辑2.从左侧项目结构中打开pom.xml,并输入如下依赖:​编辑 2.1pom.xml:3.从左......
  • leetcode 1. 两数之和
    给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。你可以按任意顺序返回答案。解1:hashclassSolution(object):deftw......
  • 7、GIC介绍与编程
    1.1GIC介绍ARM体系结构定义了通用中断控制器(GIC),该控制器包括一组用于管理单核或多核系统中的中断的硬件资源。GIC提供了内存映射寄存器,可用于管理中断源和行为,以及(在多核系统中)用于将中断路由到各个CPU核。它使软件能够屏蔽,启用和禁用来自各个中断源的中断,以(在硬件中)对各个中断......
  • 从C到Haskell
    缘起开篇之前先说说为啥开始学习Haskell,作为一个主要写C代码的中老年工程师,总觉得写代码有点那么个思维定式,而Haskell是一个和C完全不同的语言,它会迫使你放弃掉习惯了小半辈子的思维方式,可以帮助咱们中老年朋友跳出编程“舒适区”,避免思维定式。以下内容与广大中老年朋友分享学......