(11)实现微信窗体尺寸跟随自动调整-微信UI自动化(.Net+C#)

 

 整理 | 小耕家的喵大仙

出品 | CSDN(ID:lichao19897314)

Q Q | 978124155

 往期知识回顾

(1)C#开启探索微信自动化之路-微信UI自动化

(2)C#创建微信窗体自动化实例-微信UI自动化

(3)C#针对系统热键管理-微信UI自动化

(4)C#采集微信通讯录和联系人-微信UI自动化

(5)C#实现针对微信窗体鼠标静默点击-微信UI自动化

(6)C#搜索微信通讯录联系人-微信UI自动化

(7)C#实现微信消息群发-微信UI自动化

(8)C#监控微信进程运行状态-微信UI自动化

(9)C#监控微信网络连接状态-微信UI自动化

(11)C#实现微信窗体尺寸跟随调整-微信UI自动化

(12)C#采集微信聊天记录及历史消息-微信UI自动化

(13)C#实现自动回复微信消息-微信UI自动化

(14)C#针对微信界面元素截图操作-微信UI自动化

(15)C#实现对微信窗体的行为管控-微信UI自动化

(16)C#实现微信多开-微信UI自动化

(17)C#实现微信聊天文件接收及下载-微信UI自动化

(18)C#采集微信群成员信息-微信UI自动化(.Net)

(19)C#添加微信好友(可批量添加)--微信UI自动化(.Net)

(20)将微信群成员添加为好友-微信UI自动化(.Net+C#)

(21)批量删除微信联系人-微信UI自动化(.Net+C#)

(22)采集微信通讯录详情面板-微信UI自动化(.Net+C#)

👆😀以上文章是以往使用自动化方案操作微信的一些案例!如有兴趣请点击浏览!

因为文章可能无法满足读者要求,如需源码和支持请联系本人 QQ 978124155 

软件截图和视频效果

各位朋友如果时间允许可观看视频直观感受下添加微信群成员为好友的执行过程,更加直观清晰,本人将自动化速度调节的慢些,以便更加清晰的感受到自动化带来的魅力。

微信会自动嵌套到软件中并跟随软件移动位置和改变大小

先看效果,👆,为了达到更好的交互效果,我们自动化程序进行位置和大小调整时需要使得微信窗口也同步更新,以达到看上去一个整体效果。

实现思路
  1. 将微信窗体设置为本软件的子窗体,实现嵌套,防止焦点和呈现出现不一致。
  2. 当软件位置调整时发送消息给微信窗体,控制微信窗体一同移动。
  3. 当软件大小调整时发送消息给微信窗体,控制微信窗体一同调整
技术细节

控制微信跟随软件窗体移动的控制类


using FlaUI.WinForm.UIAuto.Business.WX;
using OnlineRetailers.Extension.Page.UIAuto.Log;
using OnlineRetailers.Extension.WXAuto.Page.MainPage;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Forms;
using System.Windows.Media.Media3D;
using WpfApp1;
using WpfApp1.Comon;
using WpfApp1.UIAuto.Monitor.Move;

namespace OnlineRetailers.Extension.WXAuto.UIAuto.Monitor
{
    /// <summary>
    /// 窗体大小或者位置调整改变
    /// </summary>
    public class Form_Move_Monitor : BaseMonitor
    {
        public Window Window { get; set; }

        /// <summary>
        /// 窗体是否发生位移或者大小尺寸变化
        /// </summary>
        private bool WindowSizeOrLocationChange { get; set; }

        public override void Monitor()
        {
            WindowSizeOrLocationChange = false;
            Window.SizeChanged += Main_SizeChanged;
            Window.LocationChanged += Main_LocationChanged;
			//开启监控
			if (MonitorStatus == MonitorStatus.Monitoring)
				return;
			SystemLog.Info("启动跟随微信窗体移动联动监听");

			MonitorStatus = MonitorStatus.Monitoring;

            Thread th = new Thread(new ThreadStart(() =>
            {
                while (MonitorStatus == MonitorStatus.Monitoring)
                {
                    if (Window != null && WindowSizeOrLocationChange)
                    {
                        Synchronous();
                    }
                    Thread.Sleep(300);
                }
            }));
            th.IsBackground = true;

            th.Start();
        }

        private void Main_LocationChanged(object sender, EventArgs e)
        {
            if (MonitorStatus == MonitorStatus.Monitoring)
            {
				WindowSizeOrLocationChange = true;
            }
        }

        private void Main_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            if (MonitorStatus == MonitorStatus.Monitoring)
            {
                WindowSizeOrLocationChange = true;
                
            }
        }

        /// <summary>
        /// 同步
        /// </summary>
        public void Synchronous()
        {
            WindowSizeOrLocationChange = false;
            this.Window.Dispatcher.Invoke(new Action(() =>
            {
                SynchronousSize();
                SynchronousLocation();
            }));
        }

        private int weChatWidth = 0;

        private int weChatheight = 0;

        private void SynchronousSize()
        {
            var id = WeChatWindowSourceManager.Main.Active.ActiveIntPtr();

            if (id != IntPtr.Zero)
            {
                var type = WeChatWindowSourceManager.Main.Active.ActiveWindowType();
                if (type == WpfApp1.UIAuto.Business.WeChat.WeChatWindowType.Main)
                {
                    var panelHeight = MainWindow.Current.weChatContentPanel.ActualHeight;
                    var panelWidth = MainWindow.Current.weChatContentPanel.ActualWidth;
                    var width = (int)SysTransform.TransformToPx(panelWidth)    - 4;
                    var height = (int)SysTransform.TransformToPx(panelHeight)  - 4;
                    Win32_SizeChange_Window.Do(id, width, height);
                }
            }
        }

        private void SynchronousLocation()
        {
            var id = WeChatWindowSourceManager.Main.Active.ActiveIntPtr();

            if (id != IntPtr.Zero)
            {
                var type = WeChatWindowSourceManager.Main.Active.ActiveWindowType();
                int x = 0;
                int y = 0;
                if (type == WpfApp1.UIAuto.Business.WeChat.WeChatWindowType.Main)
                {

                    x = (int)MoveUnitShifting.OpertionAreaWidth;
                    y = (int)MoveUnitShifting.WXTop + MoveUnitShifting.Margin;
                }
                if (type == WpfApp1.UIAuto.Business.WeChat.WeChatWindowType.Login)
                {
                    var panelWidth = MainWindow.Current.weChatContentPanel.ActualWidth;
                    x = (int)(SysTransform.TransformToPx(panelWidth / 2 - 80) + MoveUnitShifting.Margin);
                    y = (int)MoveUnitShifting.WXTop + MoveUnitShifting.Margin;
                }

                Win32_Move_Window.Do(id, x, y);
                Win32_Move_Window.Do(id, x - 1, y);
            }
        }

        public override void Break()
        {
            SystemLog.Info("关闭窗体移动同步微信移动监控");
            Window.SizeChanged -= Main_SizeChanged;
            Window.LocationChanged -= Main_LocationChanged;
            ExecuteMonitorStop();
        }
    }
}

调用移动跟随类


        Form_Move_Monitor windowMove = new Form_Move_Monitor();
      
private void WindowChangeInWeChatForm()
      {
          windowMove.Window = this;
          if (windowMove.MonitorStatus != MonitorStatus.Monitoring)
          {
              windowMove.MonitorStop += WXMonitorStop;
              windowMove.Monitor();
          }
      }

(10)微信UI自动化-跟随微信窗口移动(C#)icon-default.png?t=N7T8https://blog.csdn.net/lichao19897314/article/details/129763283

(11)微信UI自动化-微信窗口跟随主窗体移动(C#)icon-default.png?t=N7T8https://blog.csdn.net/lichao19897314/article/details/129763757

因为文章所表达的意思可能无法满足每一位阅读需求,需要源码或者支持请联系作者QQ 978124155

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小耕家的喵大仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值