如何使用sendinput函数C ++ [英] how to use sendinput function 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, and
ULONG_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, &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屋!