整理 | 小耕家的喵大仙
出品 | CSDN(ID:lichao19897314)
Q Q | 978124155
往期知识回顾
(19)C#添加微信好友(可批量添加)--微信UI自动化(.Net)
(20)将微信群成员添加为好友-微信UI自动化(.Net+C#)
(21)批量删除微信联系人-微信UI自动化(.Net+C#)
(22)采集微信通讯录详情面板-微信UI自动化(.Net+C#)
👆😀以上文章是以往使用自动化方案操作微信的一些案例!如有兴趣请点击浏览!
因为文章可能无法满足读者要求,如需源码和支持请联系本人 QQ 978124155
软件截图和视频效果
各位朋友如果时间允许可观看视频直观感受下添加微信群成员为好友的执行过程,更加直观清晰,本人将自动化速度调节的慢些,以便更加清晰的感受到自动化带来的魅力。
微信会自动嵌套到软件中并跟随软件移动位置和改变大小
先看效果,👆,为了达到更好的交互效果,我们自动化程序进行位置和大小调整时需要使得微信窗口也同步更新,以达到看上去一个整体效果。
实现思路
- 将微信窗体设置为本软件的子窗体,实现嵌套,防止焦点和呈现出现不一致。
- 当软件位置调整时发送消息给微信窗体,控制微信窗体一同移动。
- 当软件大小调整时发送消息给微信窗体,控制微信窗体一同调整
技术细节
控制微信跟随软件窗体移动的控制类
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#)https://blog.csdn.net/lichao19897314/article/details/129763283
(11)微信UI自动化-微信窗口跟随主窗体移动(C#)https://blog.csdn.net/lichao19897314/article/details/129763757
因为文章所表达的意思可能无法满足每一位阅读需求,需要源码或者支持请联系作者QQ 978124155