SendInput 函数详解

//函数
SendInput(
    __in UINT cInputs,                     // number of input in the array
    __in_ecount(cInputs) LPINPUT pInputs,  // array of inputs
    __in int cbSize);                      // sizeof(INPUT)


LPINPUT结构.type
#define INPUT_MOUSE     0
#define INPUT_KEYBOARD  1
#define INPUT_HARDWARE  2

//LPINPUT的结构
typedef struct tagINPUT {
    DWORD   type;

    union
    {
        MOUSEINPUT      mi;
        KEYBDINPUT      ki;
        HARDWAREINPUT   hi;
    };
} INPUT, *PINPUT, FAR* LPINPUT;


//键盘结构
typedef struct tagKEYBDINPUT {
    WORD    wVk;    //0x25
    WORD    wScan;  //MapVirtualKeyExA
    DWORD   dwFlags;  //0/KEYEVENTF_KEYUP
    DWORD   time;    //0
    ULONG_PTR dwExtraInfo;
} KEYBDINPUT, *PKEYBDINPUT, FAR* LPKEYBDINPUT;


//鼠标结构
typedef struct tagMOUSEINPUT {
    LONG    dx;
    LONG    dy;
    DWORD   mouseData;
    DWORD   dwFlags;
    DWORD   time;
    ULONG_PTR dwExtraInfo;
} MOUSEINPUT, *PMOUSEINPUT, FAR* LPMOUSEINPUT;


//硬件结构
typedef struct tagHARDWAREINPUT {
    DWORD   uMsg;
    WORD    wParamL;
    WORD    wParamH;
} HARDWAREINPUT, *PHARDWAREINPUT, FAR* LPHARDWAREINPUT;


汇编中的数据 LPKEYBDINPUT
0012F818  00000001 类型:MyInput[0].type = INPUT_KEYBOARD;
0012F81C  004B0025 高位:MyInput[0].ki.wScan =MapVirtualKeyExA(keyvalue,0,0);
                                低位:MyInput[0].ki.wVk = keyvalue;
0012F820  00000001 标志:MyInput[0].ki.dwFlags =1;
0012F824  0049CF43 时间:MyInput[0].ki.time=timeGetTime();
0012F828  00000000 扩展信息:MyInput[0].ki.dwExtraInfo=0;
0012F82C  00000000
0012F830  00000000

 

 

转载于:https://www.cnblogs.com/iTaoqi/archive/2012/06/01/2529494.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SendInput 是一个 Windows API 函数,它可以模拟用户输入设备的输入,例如鼠标、键盘等。这个函数可以用来自动化一些任务,例如模拟用户按键、鼠标点击等。 SendInput 函数的声明如下: ```C++ UINT SendInput( UINT nInputs, // 输入事件个数 LPINPUT pInputs, // 输入事件数组 int cbSize // 输入事件的大小 ); ``` 其中,参数 nInputs 是输入事件的个数,pInputs 是输入事件数组的指针,cbSize 是输入事件的大小。输入事件的类型是 INPUT 结构体,它包含了输入事件的类型、输入事件的数据等。例如,以下是一个模拟按下键盘上的 A 键的示例: ```C++ // 定义一个 INPUT 结构体数组 INPUT input[1]; // 设置输入事件的类型为键盘输入 input[0].type = INPUT_KEYBOARD; // 设置键盘输入的数据 input[0].ki.wVk = 'A'; // 发送输入事件 SendInput(1, input, sizeof(INPUT)); ``` 上面的代码将会模拟一个键盘按下 A 键的操作。如果要模拟键盘松开 A 键的操作,可以将 ki.dwFlags 设置为 KEYEVENTF_KEYUP: ```C++ // 定义一个 INPUT 结构体数组 INPUT input[1]; // 设置输入事件的类型为键盘输入 input[0].type = INPUT_KEYBOARD; // 设置键盘输入的数据 input[0].ki.wVk = 'A'; input[0].ki.dwFlags = KEYEVENTF_KEYUP; // 设置为键盘松开 // 发送输入事件 SendInput(1, input, sizeof(INPUT)); ``` 需要注意的是,模拟输入事件是需要管理员权限的。同时,模拟输入事件也可能会对系统造成一定的安全风险,所以在使用 SendInput 函数时需要谨慎操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值