C# 驱动级模拟键盘输入

本文介绍了C#模拟键盘输入的三种方法:1) 使用.Net Framework库函数,如SendKeys;2) 利用WinIO.dll直接在驱动层面操作,适用于32位和64位系统,但需要管理员权限和特定键盘类型;3) 使用WinRing0x64.dll,相比WinIO更便捷,同样要求管理员权限和PS/2键盘。文中还提供了相关Demo和参考资料。
摘要由CSDN通过智能技术生成
1. 使用.Net Framework的库函数
SendKeys.SendWait("123{TAB}abc");

namespace System.Windows.Forms命名空间下的SendKeys是.Net提供的模拟键盘输入的工具类。其中有Send()SendWait()这两个方法,都可以发送按键消息。区别在于SendWait()是会等待按键消息被处理完成才返回的,而Send()则不用。这就类似于SendMessagePostMessage的关系。
上面代码中的{TAB}代表Tab键。键盘上一些特殊的按键都有对应的代码,具体的对照表可以参照微软MSDN上的介绍:SendKeys Class

当然,还可以使用Windows API,API原型如下:

        /// <summary>
        /// 合成一次击键事件
        /// </summary>
        /// <param name="bVk">定义一个虚拟键码。键码值必须在1~254之间</param>
        /// <param name="bScan">定义该键的硬件扫描码</param>
        /// <param name="dwFlags">定义函数操作的各个方面的一个标志位集。应用程序可使用如下一些预定义常数的组合设置标志位</param>
        /// <param name="dwExtraInfo">定义与击键相关的附加的32位值</param>
        [DllImport("user32")]
        public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, 
uint dwExtraInfo);

甚至用SendMessagePostMessage也是可以做到的。

但以上这些实现方法都是在Windows消息层面的,对于像记事本等常规应用程序是没问题的。但是对于一些游戏、QQ登录框、网银登录框等则无效。这是因为这些程序不是从Windows消息中获取按键信息的,而是直接从底层驱动层面获取按键信息的

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值