首页 > 编程语言 >(3)微信UI自动化-热键管理(C#)

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

时间:2023-11-02 14:34:06浏览次数:42  
标签:Handle C# 微信 热键 System WinHotKey using

      进行微信自动化前,因为采集或者发送消息任务执行需要时间,并且微信窗体会将焦点长期占有,导致我们对软件失去控制,所以我们需要使用热键的方式将任务停止。我们这里采用热键是​编辑

(1)编写一个热键管理类

 这个类定义了捕获热键消息的ID,注册热键,注销热键的功能。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OnlineRetailers.Extension.Page.UIAuto.Business
{
    /// <summary>
    /// 热键管理
    /// </summary>
    public class WinHotKey
    {
        /// <summary>
        /// 注册热键
         /// </summary>
        /// <param name="hWnd">为窗口句柄</param>
        /// <param name="id">注册的热键识别ID</param>
        /// <param name="control">组合键代码  Alt的值为1,Ctrl的值为2,Shift的值为4,Shift+Alt组合键为5
        ///  Shift+Alt+Ctrl组合键为7,Windows键的值为8
        /// </param>
        /// <param name="vk">按键枚举</param>
        /// <returns></returns>
        [DllImport("user32")]
        static extern bool RegisterHotKey(IntPtr hWnd, int id, uint control, Keys vk);

        /// <summary>
        /// 取消注册的热键
        /// </summary>
        /// <param name="hWnd">窗口句柄</param>
        /// <param name="id">注册的热键id</param>
        /// <returns></returns>
        [DllImport("user32")]
        static extern bool UnregisterHotKey(IntPtr hWnd, int id);

        /// <summary>
        /// 任务停止热键
        /// </summary>
        /// <param name="Handle"></param>
        public static void RegisterStop(IntPtr Handle)
        {
            WinHotKey.RegisterHotKey(Handle, StopId, 2, Keys.F8);
        }
        /// <summary>
        /// 取消停止热键
        /// </summary>
        /// <param name="Handle"></param>
        public static void UnRegisterStop(IntPtr Handle)
        {
            WinHotKey.UnregisterHotKey(Handle, StopId);
        }
        /// <summary>
        /// 停止ID
        /// </summary>
        public static readonly int StopId = 8879;
    }
}

 

 (2)窗体注册和注销热键

在窗体的Load事件中注册热键

     this.Load += WXUIAuto_Load;
     private void WXUIAuto_Load(object sender, EventArgs e)
        {  
          WinHotKey.RegisterStop(this.Handle); 
        }

在窗体关闭事件中注销事件

 this.FormClosed += WXUIAuto_FormClosed;
 private void WXUIAuto_FormClosed(object sender, FormClosedEventArgs e)
        {
            WinHotKey.UnRegisterStop(this.Handle);
        }

注册了热键事件后我们需要一个方法来监听热键的事件,From窗体中提供了处理消息WndProc方法,我们重写这个方法,并加入自己的逻辑。

 protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                case 0x0312:                                 
                    if (m.WParam.ToString().Equals(WinHotKey.StopId.ToString()))    
                    {
                        //停止微信自动化任务
                    }
                    break;
            }
            base.WndProc(ref m);
        }

0x0312是热键的消息类型,消息参数是我们自己定义的,如果热键的消息参数等于停止的ID 8897就停止微信自动化任务。

接下来我们进行联系人采集学习

上一篇(2)微信UI自动化-微信窗体管理(C#)

下一篇(4)微信UI自动化-联系人采集(C#)

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

标签:Handle,C#,微信,热键,System,WinHotKey,using
From: https://www.cnblogs.com/lichao7314/p/17805320.html

相关文章

  • 移动端注意事项及坑位1(CSS)
    学习 中高级前端必须注意的40条移动端H5坑位指南|网易三年实践1.调用系统功能a标签能快速调用移动设备电话/短信/邮件功能,input标签可快速调用移动设备相册文件<!--拨打电话--><ahref="tel:10086">拨打电话给10086小姐姐</a><!--发送短信--><ahref="sms:1008......
  • 直播小程序源码,react-native自定义文本输入框
    直播小程序源码,react-native自定义文本输入框Examplesfromprops: ... _onChange=(label,value)=>{  this.setState({[label]:value}); }; render(){  return(   <Viewstyle={styles.container}>    <Text>     {this.stat......
  • 网站验证码cookie,localStorage
    很多网站登录或则注册时,都会做一个利用手机号获取验证码证明为本人操作的选项。当然为了网站的web网站安全和防止信息炸弹等恶意操作,都会对再次获取验证码做一个倒计时,一般都为60s。而正常情况下只需利用JS定时函数很容易实现,这种情况下用户一旦刷新页面,页面dom中我们定义的js变量......
  • dev like 函数 widechar 版本
    functionLike(p1:PChar;l1:Integer;p2:PChar;l2:Integer;percent_char,underline_char,escape_char:Char):Boolean;overload;varc:Char;AEscapeFlag:Boolean;beginAEscapeFlag:=False;repeatDec(l2);ifl2<0thenBreak;......
  • C语言中静态函数和非静态函数的区别
     C语言中,静态函数和非静态函数的区别主要体现在以下方面:可见性:静态函数只能在当前文件内使用,不能被其他文件调用,而非静态函数可以被当前文件以外的其他文件调用,具有全局可见性。生命周期:静态函数在程序运行期间一直存在,不会被释放,而非静态函数则是在被......
  • CDN加速
    一、简介二、应用场景    系统有很多的静态资源的,并且请求量也是超级大的。例如:移动端APP,有很多的图片,小视频以及流媒体等,对于网站来说,不仅有上面那些资源之外,还有大量的HTML文件,css文件以及Javascript文件。目前这些静态资源均是放在Nginx服务器上的,请求量很大,并且这些......
  • ASP.NET Core Filter
    Filter在ASP.NETCore中允许code在指定的请求阶段前或者后执行。Filter在ASP.NETCore方法请求管道中运行,有时被称作filterpipeline,filterpipeline在ASP.NETCore选择Action执行。 Filter分类每个filtertype在filterpipeline的不同阶段执行。AuthorizationFilter:第一......
  • Docker基础
    Docker基础Docker常见命令Docker最常见的命令就是操作镜像、容器的命令,详见官方文档:https://docs.docker.com/案列:查看DockerHub,拉取Nginx镜像,创建并运行Nginx容器拉取镜像dockerpullnginx查看镜像dockerimages保存镜像为tar包dockersave-onginx.tarnginx:lat......
  • python @staticmethod 静态方法的使用
    `@staticmethod`是Python中的一个装饰器,用于将一个方法声明为静态方法。静态方法是一种不需要访问类实例的方法,可以直接通过类名调用,而不需要创建类的实例。静态方法的使用场景包括:1.辅助类或工具类:静态方法可以用于辅助其他类或提供一些通用的工具功能,而不需要与类的实例进......
  • Spring、Spring5、Spring MVC、 Spring boot、Spring Cloud的区别
    官方解释Spring:是一个开源框架,用于创建Java应用程序的企业级框架。Spring5:是Spring框架的最新版本,增加了一些新特性,如响应式编程支持等。其核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMVC)、业务层(IOC)、持久层(jdbcTemplate)等都提供了多种配置解决方案。S......