C#版本的按键精灵,全局键盘鼠标事件

这篇具有很好参考价值的文章主要介绍了C#版本的按键精灵,全局键盘鼠标事件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

代码参考:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Net.Mime.MediaTypeNames;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;
using static WindowsFormsApp1.GlobalMousePosition;

namespace 测试Demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.TopMost = true;
        }
        private async void button1_Click(object sender, EventArgs e)
        {
            int time = 300;
            //模拟点击
            SimulateMouseClick(666, 666);
            await SetText("2023-06-20");
            Thread.Sleep(time);
            //发送Alt+Q
            SendKeys.Send("%Q");
            Thread.Sleep(time);
            Send_CV();
            Release_CV();
            Thread.Sleep(time);
            // 发送回车键
            SendKeys.Send("{ENTER}");
            Thread.Sleep(time);
            await SetText("G20");
            Thread.Sleep(time);
            Send_CV();
            Release_CV();
            Thread.Sleep(time);
            // 发送回车键
            SendKeys.Send("{ENTER}");
            Thread.Sleep(time);
            await SetText("上海");
            Thread.Sleep(time);
            Send_CV();
            Release_CV();
            Thread.Sleep(time);
            // 发送回车键
            SendKeys.Send("{ENTER}");
            Thread.Sleep(time);
            await SetText("广州");
            Thread.Sleep(time);
            Send_CV();
            Release_CV();
            MessageBox.Show("完成");

        }

        const int KEYEVENTF_EXTENDEDKEY = 0x0001;
        const int KEYEVENTF_KEYUP = 0x0002;
        private void Send_CV() 
        {
            // 模拟按下 Ctrl 键
            keybd_event(0x11, 0, KEYEVENTF_EXTENDEDKEY, UIntPtr.Zero);

            // 模拟按下 V 键
            keybd_event(0x56, 0, KEYEVENTF_EXTENDEDKEY, UIntPtr.Zero);
            // 等待一小段时间
            Thread.Sleep(100);
        }

        private void Release_CV()
        {
            // 模拟松开 V 键
            keybd_event(0x56, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, UIntPtr.Zero);

            // 模拟松开 Ctrl 键
            keybd_event(0x11, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, UIntPtr.Zero);
        }

        private async Task SetText(string text) 
        {
            await Task.Run(() => {
            //写入剪贴板需要单独开个任务或者线程去跑 不然UI层容易死机
                this.Invoke((MethodInvoker)(() => Clipboard.SetText(text)));
            });
            Thread.Sleep(200);
        }


    }
}

钩子类:文章来源地址https://www.toymoban.com/news/detail-626952.html

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

namespace WindowsFormsApp1
{
    public static class GlobalMousePosition
    {
        #region 获取鼠标当前位置
        public const int WH_MOUSE_LL = 14;

        public enum MouseMessages
        {
            WM_MOUSEMOVE = 0x0200
        }

        public delegate int LowLevelMouseProc(int nCode, IntPtr wParam, IntPtr lParam);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern IntPtr SetWindowsHookEx(int idHook, LowLevelMouseProc lpfn, IntPtr hMod, uint dwThreadId);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool UnhookWindowsHookEx(IntPtr hhk);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern int CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern IntPtr GetModuleHandle(string lpModuleName);
        #endregion


        #region 点击事件
        [DllImport("user32.dll")]
        static extern bool SetCursorPos(int x, int y);

        [DllImport("user32.dll")]
        public static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, int dwExtraInfo);

        // 模拟鼠标点击一次
        public static void SimulateMouseClick(int x, int y)
        {
            SetCursorPos(x, y);
            Thread.Sleep(100);  // 等待 100 毫秒,确保鼠标移动到指定位置

            // 模拟鼠标按下和释放操作(模拟点击)
            mouse_event(0x0002, x, y, 0, 0);  // 鼠标左键按下
            mouse_event(0x0004, x, y, 0, 0);  // 鼠标左键释放
        }
        #endregion


        #region 模拟键盘操作
        [DllImport("user32.dll")]
        public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
        #endregion
    }
}

到了这里,关于C#版本的按键精灵,全局键盘鼠标事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#全局监听键盘事件

    C#如何获取键盘和鼠标处于空闲状态下的时间  可以通过windows api 函数 GetLastInputInfo或者全局钩子HOOK来实现 用 GetLastInputInfo 写(键鼠空闲15分钟自动弹出一个页面) 新建windows 应用程序项目 用HOOK钩子来实现 创建钩子类 调用 方法

    2024年02月11日
    浏览(39)
  • c#使用Hook钩子全局监听键盘和鼠标

    背景:今天接到客户一个需求,就是在收银员在用扫码枪扫顾客会员码或者微信付款码的时候判断用户有没有加企微好友和进企微群,然后根据这个状态进行语音播报,判断顾客能不能享受优惠价。关键难点就是用户用的收银系统是别家的,线上小程序用的是我们家的,两家

    2024年01月22日
    浏览(49)
  • 电脑端(PC)按键精灵——2.键盘命令和鼠标命令

    注:说命令之前,先说下基本设置 电脑端(PC)按键精灵—小白入门 详细教程 一、设置 如下图,点击设置,脚本格式——可以设置字体等内容 字体变大了 修改文件名,脚本属性 二、简单常用按键 1.注释和取消注释 注释的话前面加“ // ”,取消注释择删掉“ // ” 软件自带

    2024年02月08日
    浏览(47)
  • 关于使用C#调用Win32API,抓取第三方句柄,模拟鼠标点击,键盘发送事件(C2Prog.exe)

    因为最近工作需要用就把基本知识整理了一下 主要操作这个软件写程序和选配置   下面例子和Win32以及自己封装的库全在工程文件里面 2023.7.10 :以前写的代码丢了重新写了一下优化了不少 ,所以特此更新一下 以前是1.7的版本目前用的是1.9版本有些不一样需要注意  这里放最新

    2024年02月14日
    浏览(52)
  • C#键盘按键对应Keys类大全

                       

    2024年02月12日
    浏览(33)
  • C# 键盘事件 输入焦点

    键盘事件:自定义的空间,如何接收键盘输入。 OnKeyDown 按键按下; OnKeyUp 按键抬起; OnKeyPress 字符输入; OnKeyDown: 同时,还可以判断是否按下了控制键 OnkeyPress: char ch=e.KeyChar; ① 区分大小写,比如,\\\'a’和’A’是不同的; ② 如果一直按着,则KeyPress事件会多次触发; OnKey

    2024年02月08日
    浏览(48)
  • C#实现键盘鼠标模拟器

    下面程序可指定一连串重复动作,按顺序执行   using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Text.RegularExpressions; using System.Windows.Forms; namespace Simulator {     public partial class Form1 : Form     {         [System.Runtime.InteropServices.DllImp

    2024年02月16日
    浏览(49)
  • C# 全局响应Ctrl+Alt+鼠标右键

    某些应用,我们希望全局自定义热键。按键少了会和别的应用程序冲突,按键多了可定用户操作不变。因此我计划左手用Ctrl+Alt,右手用鼠标右键呼出我自定义的菜单。 我使用键盘和鼠标事件进行简单测试(Ctrl+鼠标右键),发现并不能成功。 因此只好使用“钩子”。  通过

    2024年02月15日
    浏览(39)
  • unity脚本_Input鼠标键盘 c#

    获取鼠标坐标 检测鼠标输入 如果在运行游戏场景中点击一下鼠标左键 检测鼠标抬起 选中即可 检测键盘按下 当前屏幕分辨率 注意:获取的是显示器的分辨率 获取设备屏幕宽高 屏幕休眠模式 窗口/全屏模式 移动设备屏幕转向

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包