使用Sendinput函数模拟鼠标键盘操作

文章目录

      • 1.程序说明
      • 2.分析
      • 3.SendInput

1.程序说明

  • vs2008编译
  • 代码在gayhub,链接
  • 主要是使用SendInput函数,所以要好好看参数说明,建议MSDN走一波

2.分析

  • 以鼠标为例,按左键,可以分成2个步骤:
    1.鼠标左键按下
    2.鼠标左键弹起
    所以,模拟一个按键的动作,需要input2个事件,一般是key_down,key_up

  • 怎么模拟组合键呢?比如说ctr+z
    在上面已经了解了一个按键的过程,这里的组合键,一般要交叉发送key_down,key_up
    比如这里需要这样:ctr_key_down 、 z_key_down 、 ctr_key_up 、 z_key_up
    也就是说2个键的down要在up之前,而且像ctr这样的功能键事件要先发出。

  • 要模拟一个键的按下和弹起,最好要一次调用SendInput,传入2个事件:按下和弹起,代码里有例子,以键盘输入a为例子。 组合键也是同理。

3.SendInput

UINT SendInput(          
	UINT nInputs,
    LPINPUT pInputs,
    int cbSize
);

很简单的英语,不翻译了
nInputs
[in] Number of structures in the pInputs array.
pInputs
[in] Pointer to an array of INPUT structures. Each structure represents an event to be inserted into the keyboard or mouse input stream.
cbSize
[in] Specifies the size, in bytes, of an INPUT structure. If cbSize is not the size of an INPUT structure, the function fails.

  • 调用例子可以参考程序里的。
  • 这个函数将键鼠的输入统一成了一个函数,通过参数的不同来区分。
  • 还有一点就是INPUT 结构体里的union赋值都是深拷贝,所以不管是键盘输入改变还是鼠标输入改变,都需要重新赋值。

你可能感兴趣的:(Hook)