博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#实现的三种方式实现模拟键盘按键
阅读量:6588 次
发布时间:2019-06-24

本文共 1987 字,大约阅读时间需要 6 分钟。

模拟按键在.Net中有三种方式实现。

第一种方式:System.Windows.Forms.SendKeys 

                     组合键:Ctrl = ^ 、Shift = + 、Alt = %

模拟按键:A

private void button1_Click(object sender, EventArgs e)        {            textBox1.Focus();            SendKeys.Send("{A}");        }

模拟组合键:CTRL + A

private void button1_Click(object sender, EventArgs e)        {            webBrowser1.Focus();            SendKeys.Send("^{A}");        }

SendKeys.Send // 异步模拟按键(不阻塞UI)

SendKeys.SendWait // 同步模拟按键(会阻塞UI直到对方处理完消息后返回)

第二种方式:keybd_event

模拟按键:A

[DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]        public static extern void keybd_event(Keys bVk, byte bScan, uint dwFlags, uint dwExtraInfo);        private void button1_Click(object sender, EventArgs e)        {            textBox1.Focus();            keybd_event(Keys.A, 0, 0, 0);        }

模拟组合键:CTRL + A

public const int KEYEVENTF_KEYUP = 2;        private void button1_Click(object sender, EventArgs e)        {            webBrowser1.Focus();            keybd_event(Keys.ControlKey, 0, 0, 0);            keybd_event(Keys.A, 0, 0, 0);            keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);        }

上面两种方式都是全局范围呢,现在介绍如何对单个窗口进行模拟按键

模拟按键:A / 两次

[DllImport("user32.dll", EntryPoint = "PostMessageA", SetLastError = true)]        public static extern int PostMessage(IntPtr hWnd, int Msg, Keys wParam, int lParam);        public const int WM_CHAR = 256;        private void button1_Click(object sender, EventArgs e)        {            textBox1.Focus();            PostMessage(textBox1.Handle, 256, Keys.A, 2);        }

模拟组合键:CTRL + A

       如下方式可能会失效,所以最好采用上述两种方式

public const int WM_KEYDOWN = 256;        public const int WM_KEYUP = 257;        private void button1_Click(object sender, EventArgs e)        {            webBrowser1.Focus();            keybd_event(Keys.ControlKey, 0, 0, 0);            keybd_event(Keys.A, 0, 0, 0);             PostMessage(webBrowser1.Handle, WM_KEYDOWN, Keys.A, 0);            keybd_event(Keys.ControlKey, 0, KEYEVENTF_KEYUP, 0);

转载地址:http://rnhno.baihongyu.com/

你可能感兴趣的文章
linux抓包工具:tcpdump 工具用法
查看>>
WordPress优化:为原创文章和转载文章分别添加不同的版权申明
查看>>
python第三库安装方法记录
查看>>
利用事件对象同步线程
查看>>
IO流-设置输出字符编码格式
查看>>
全面掌握ping命令(三) ping命令防火墙设置
查看>>
CENTOS利用Keepalived构建双主MySQL+双机热备
查看>>
DELL Latitude E5400 装了PC DOS 7.1系统启动不了
查看>>
设为首页和加入收藏js
查看>>
我在百度运维的成长经历 之六
查看>>
Office 2007打开提示The setup controller has encountered
查看>>
WCF分布式开发常见错误(13):此方法调用的事务被异步中断
查看>>
烂泥:Tomcat免安装版与JRE免安装版集成
查看>>
【STM32 .Net MF开发板学习-03】TinyGUI绘图示例
查看>>
如何用方正飞腾做出“凹”形文本框
查看>>
Android中自定义控件
查看>>
从DCF到DCX:构想照进现实
查看>>
智能手机操作系统安全性简评
查看>>
详解Spring Security进阶身份认证之UserDetailsService(附源码)
查看>>
有多难
查看>>