gpt4 book ai didi

c++ - 如何使用sendinput函数C++

转载 作者:IT老高 更新时间:2023-10-28 22:26:33 27 4
gpt4 key购买 nike

虽然看到msdn的sendinput函数,我也不知道输入了什么参数。

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

以上参数是什么意思,我需要为它们创建什么?此外,键入,ki.wScan,ki.time,ki.dwExtraInfo,ki.wVk,ki.dwFlags上面的对象是什么意思,还有其他可能经常使用的对象吗?

最佳答案

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

LPINPUT结构定义如下:

typedef struct tagINPUT {
DWORD type;

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

所以它看起来像一个 DWORD 加上一些其他结构的 union 。引用 WinUser.h了解更多。

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

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;

鼠标输入

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

KEYBDINPUT

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

硬件输入

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

WORDLONGULONGULONG_PTRMSDN page 上都有明确定义(见右栏)

这是一个使用 SendInput 的示例,可以通过谷歌搜索 (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;
}

你问题的另一部分:

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

我相信您指的是 MSDN page 中的这段代码:

// 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));

该代码是由页面上的另一个用户发布的;它不是文档的一部分。用户只需创建一个名为 keyEventLPINPUT 结构,然后访问该结构的 KEYBDEVENT 部分:

KEYBDINPUT      ki;

关于c++ - 如何使用sendinput函数C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22419038/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com