1. 使用.Net Framework的库函数
SendKeys.SendWait("123{TAB}abc");
namespace System.Windows.Forms
命名空间下的SendKeys
是.Net提供的模拟键盘输入的工具类。其中有Send()
和SendWait()
这两个方法,都可以发送按键消息。区别在于SendWait()
是会等待按键消息被处理完成才返回的,而Send()
则不用。这就类似于SendMessage
和PostMessage
的关系。
上面代码中的{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);
甚至用SendMessage
和PostMessage
也是可以做到的。
但以上这些实现方法都是在Windows消息层面的,对于像记事本等常规应用程序是没问题的。但是对于一些游戏、QQ登录框、网银登录框等则无效。这是因为这些程序不是从Windows消息中获取按键信息的,而是直接从底层驱动层面获取按键信息的。