如何使用sendinput函数C ++ [英] how to use sendinput function C++

查看:113
本文介绍了如何使用sendinput函数C ++的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道什么参数输入,即使我看到sendinput函数从msdn。

I have no idea about what parameters are inputted even though I saw the sendinput function from msdn.

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

参数是什么意思,我需要为他们创建什么?
此外,键入,ki.wScan,ki.time,ki.dwExtraInfo,ki.wVk,ki.dwFlags
上面的对象是什么意思,是否有任何其他可能被频繁使用的对象? p>

What do parameters above mean and what do I need to create for them? Also, type, ki.wScan, ki.time, ki.dwExtraInfo, ki.wVk, ki.dwFlags What do objects above mean and is there any other objects that may be frequently used?

推荐答案

UINT 是无符号整数类型。 _In _ 表示参数是您发送到函数的输入参数。这与 参数相反,这是您发送的内容,函数将填入

UINT is an unsigned integer type. _In_ means the parameter is an input parameter that you send into the function. This is opposed to an output parameter, which would be something you send in, and the function would fill in.

LPINPUT 结构定义如下:

typedef struct tagINPUT {
    DWORD   type;

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

所以它看起来像一个DWORD与一些其他结构的联合。有关详情,请参阅 WinUser.h

So it looks like a DWORD coupled with a union of some other structures. Refer to WinUser.h for more.

DWORD 是一个32位无符号整数( source ):

DWORD is a 32-bit unsigned integer (source):


DWORD是一个32位无符号整数(范围:0到4294967295
十进制)。因为DWORD是无符号的,所以其第一位(Most Significant
Bit(MSB))不保留用于签名。此类型声明为
如下:typedef unsigned long DWORD,* PDWORD,* LPDWORD;

A DWORD is a 32-bit unsigned integer (range: 0 through 4294967295 decimal). Because a DWORD is unsigned, its first bit (Most Significant Bit (MSB)) is not reserved for signing. This type is declared as follows: typedef unsigned long DWORD, *PDWORD, *LPDWORD;



MOUSEINPUT



MOUSEINPUT

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



KEYBDINPUT



KEYBDINPUT

typedef struct tagKEYBDINPUT {
    WORD    wVk;
    WORD    wScan;
    DWORD   dwFlags;
    DWORD   time;
    ULONG_PTR dwExtraInfo;
} KEYBDINPUT, *PKEYBDINPUT, FAR* LPKEYBDINPUT;



HARDWAREINPUT



HARDWAREINPUT

typedef struct tagHARDWAREINPUT {
    DWORD   uMsg;
    WORD    wParamL;
    WORD    wParamH;
} HARDWAREINPUT, *PHARDWAREINPUT, FAR* LPHARDWAREINPUT;

WORD LONG ,'ULONG ULONG_PTR都在 MSDN页面(请参见右侧的列)

WORD, LONG, 'ULONG, andULONG_PTR` are all well-defined on the MSDN page (See the column on the right)

下面是使用 SendInput or-c-using-sendinput /> Source ):

Here's an example of using SendInput that can be easily found via Googling (Source):

//
// keystroke.c - Pauses, then simulates a key press
// and release of the "A" key.
//
// Written by Ted Burke - last updated 17-4-2012
//
// To compile with MinGW:
//
//      gcc -o keystroke.exe keystroke.c
//
// To run the program:
//
//      keystroke.exe
//
// ...then switch to e.g. a Notepad window and wait
// 5 seconds for the A key to be magically pressed.
//

// Because the SendInput function is only supported in
// Windows 2000 and later, WINVER needs to be set as
// follows so that SendInput gets defined when windows.h
// is included below.
#define WINVER 0x0500
#include <windows.h>

int main()
{
    // This structure will be used to create the keyboard
    // input event.
    INPUT ip;

    // Pause for 5 seconds.
    Sleep(5000);

    // Set up a generic keyboard event.
    ip.type = INPUT_KEYBOARD;
    ip.ki.wScan = 0; // hardware scan code for key
    ip.ki.time = 0;
    ip.ki.dwExtraInfo = 0;

    // Press the "A" key
    ip.ki.wVk = 0x41; // virtual-key code for the "a" key
    ip.ki.dwFlags = 0; // 0 for key press
    SendInput(1, &ip, sizeof(INPUT));

    // Release the "A" key
    ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
    SendInput(1, &ip, sizeof(INPUT));

    // Exit normally
    return 0;
}

您的问题的另一部分:


此外,键入,ki.wScan,ki.time,ki.dwExtraInfo,ki.wVk,ki.dwFlags
上面的对象是什么意思

Also, type, ki.wScan, ki.time, ki.dwExtraInfo, ki.wVk, ki.dwFlags What do objects above mean

我相信你指的是 MSDN页面

// IMPORTANT: Current keyboard layout 0xf0010413 (Netherland with USA kbd)!!!!!!!
WORD vkCode = 0x36; // '6'
INPUT keyEvent = {0};
keyEvent.type = INPUT_KEYBOARD;
keyEvent.ki.wVk = vkCode;
keyEvent.ki.wScan = MapVirtualKeyEx(vkCode, 0, (HKL)0xf0010413);
SendInput(1, &amp;keyEvent, sizeof(keyEvent));

该代码是由页面上的另一个用途发布的;它不是文档的一部分。用户简单地创建了一个名为 keyEvent LPINPUT 结构,然后访问 KEYBDEVENT 结构的一部分:

That code was posted by another use on the page; it's not part of the documentation. The user simply created an LPINPUT structure named keyEvent, and then accessed the KEYBDEVENT part of the structure:

KEYBDINPUT      ki;

这篇关于如何使用sendinput函数C ++的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆