c# 模拟键盘动作

原创 2011年01月12日 18:02:00

Windows提供了一个模拟键盘API函数Keybd_event(),使用该函数可以相应的屏蔽键盘的动作。Keybd_event()函数能触发一个按键事件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消息。该函数原型如下:

  VOID keybd_event(
      BYTE bVk, // virtual-key code
      BYTE bScan, // hardware scan code
      DWORD dwFlags, // flags specifying various function options
      DWORD dwExtraInfo // additional data associated with keystroke
  );

  从上述原型可以看出,Keybd_event()共有四个参数,第一个为按键的虚拟键值,如回车键为vk_return,

  tab键为vk_tab。第二个参数为扫描码,一般不用设置,用0代替就行第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP" 或是 "0x2",第四个参数一般也是置0即可。'A'的虚拟键值为65,所以可以用如下代码实现模拟按下'A'键,

  keybd_event(65,0,0,0);
  keybd_event(65,0,KEYEVENTF_KEYUP,0); 

    Windows还提供了一个API函数mouse_event,可以模拟一次鼠标事件,比如左键单击、双击和右键单击等。   mouse_event函数原型如下:

  VOID mouse_event(
        DWORD dwFlags,     // flags specifying various motion/click variants
      DWORD dx,          // horizontal mouse position or position change
      DWORD dy,          // vertical mouse position or position change
      DWORD dwData,      // amount of wheel movement
      DWORD dwExtraInfo  // 32 bits of application-defined information
  );

  第一个参数为代表所要模拟的鼠标消息,为MOUSEEVENTF_LEFTDOWN时表示左键按下,为MOUSEEVENTF_LEFTUP表示左键松开。一般情况下,dwFlags取值如下:

  MOUSEEVENTF_MOVE 移动鼠标
  MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下
  MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起
  MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下
  MOUSEEVENTF_RIGHTUP 模拟鼠标右键抬起
  MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下
  MOUSEEVENTF_MIDDLEUP 模拟鼠标中键抬起
  MOUSEEVENTF_ABSOLUTE 标示是否采用绝对坐标

  第二三个参数分别表示鼠标的位置坐标x,y,根据MOUSEEVENTF_ABSOLUTE标志,指定x,y方向的绝对位置或相对位置。第四五个参数并不重要,一般也可设为0,0。

    调用方法:
        keybd_event((byte)Keys.LWin, 0, 0, 0);   //按下LWIN
        keybd_event((byte)Keys.D, 0, 0, 0);         //按下D
        keybd_event((byte)Keys.LWin, 0, 0x2, 0);   //释放LWIN
        keybd_event((byte)Keys.D, 0, 0x2, 0);        //释放D
 
    若在C#中改成这样:
        [DllImport("user32.dll", EntryPoint = "keybd_event")]
        public static extern void keybd_event(
            byte bVk,   
            byte bScan,
            int dwFlags,  //这里是整数类型  0 为按下,2为释放
            int dwExtraInfo  //这里是整数类型 一般情况下设成为 0
        );
        
    调用方法:
        keybd_event((byte)Keys.LWin, 0, 0, 0);   //按下LWIN
        keybd_event((byte)Keys.D, 0, 0, 0);         //按下D
        keybd_event((byte)Keys.LWin, 0, 2, 0);   //释放LWIN
        keybd_event((byte)Keys.D, 0, 2, 0);        //释放D

相关文章推荐

C# 使用keybd_event()函数模拟键盘按键

今天碰到了一个需求,在一体机上按F10关闭一个应用。但一体机上如果不带键盘的话。很难按出F10.所以我必须用软件的方式模拟按下F10.于是查阅各种资料。总结出,模拟按键操作常用的方式有俩种: 使用wi...

c# webBrowser 模拟键盘输入及后台执行js

1,最简单的方法             this.Activate();             fkNum.Focus();             SendKeys.Send("{Shif...
  • seewp
  • seewp
  • 2014年10月31日 11:04
  • 1220

C#模拟键盘输入源代码

C#模拟键盘输入,C#.net中怎么样模拟键盘输入 主要用到的类SendKeys.并通过其方法Send()向当前活动的应用程序发送单击动作行为。 MSDN中对SendKeys.Send...

WinIO驱动级模拟键盘 C#

最近做一个项目用到键盘输入,试了很多种普通的模拟键盘输入,都是实现不了,特别是到输入密码这块,根本输入不了,最后用到了这个WinIo驱动级的输入才搞定的,以下是具体代码:    #region 驱...
  • bbwfang
  • bbwfang
  • 2012年11月12日 13:10
  • 5816

C#模拟键盘鼠标事件 SendKeys 的特殊键代码表

使用 SendKeys 将键击和组合键击发送到活动应用程序。此类无法实例化。若要发送一个键击给某个类并立即继续程序流,请使用 Send。若要等待键击启动的任何进程,请使用 SendWait。 每个键都...

C# 模拟键盘操作SendKey(),SendKeys()

模拟键盘输入就是使用以下2个语法实现的. SendKeys.Send(string keys);  //模拟汉字(文本)输入 SendKeys.SendWait(string keys); /...

C#模拟键盘事件

C#模拟键盘事件 public partial class Form1 : Form     {         public Form1()         {            ...

C# 模拟键盘 和 鼠标

在coding team学了三个月,每天真是煎熬呀,现在觉得

C#类模拟键盘和鼠标以及内存读取

 key kk = new key();             //  IntPtr a = new IntPtr();             kk.sendwinio();       ...

WinIO驱动级模拟键盘 C#

http://blog.csdn.net/bbwfang/article/details/8173749#comments
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c# 模拟键盘动作
举报原因:
原因补充:

(最多只允许输入30个字)