在Delphi中使用SendInput可以实现模拟键盘和鼠标事件,以下是一个简单的示例:
首先,需要在Delphi中引入Windows API函数SendInput:
uses
Windows;
const
SM_CXSCREEN = 0;
SM_CYSCREEN = 1;
type
TInput = record
Type_: DWORD;
case Integer of
0: (mi: TMouseInput);
1: (ki: TKeybdInput);
2: (hi: THardwareInput);
end;
TInputs = array of TInput;
function SendInput(cInputs: UINT; pInputs: PInput; cbSize: Integer): UINT; stdcall; external 'user32.dll';
然后,可以使用以下代码模拟鼠标点击事件:
procedure ClickMouse(X, Y: Integer);
var
Inputs: TInputs;
Input: TInput;
begin
SetLength(Inputs, 2);
Input.Type_ := INPUT_MOUSE;
Input.mi.dx := X;
Input.mi.dy := Y;
Input.mi.mouseData := 0;
Input.mi.dwFlags := MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE;
Inputs[0] := Input;
Input.mi.dwFlags := MOUSEEVENTF_LEFTDOWN;
Inputs[1] := Input;
SendInput(2, Inputs[0], SizeOf(Input));
Input.mi.dwFlags := MOUSEEVENTF_LEFTUP;
Inputs[1] := Input;
SendInput(2, Inputs[0], SizeOf(Input));
end;
以下是使用SendInput模拟键盘按键事件的示例代码:
procedure KeyPress(Key: Word);
var
Inputs: TInputs;
Input: TInput;
begin
SetLength(Inputs, 2);
Input.Type_ := INPUT_KEYBOARD;
Input.ki.wVk := Key;
Input.ki.wScan := MapVirtualKey(Key, 0);
Input.ki.dwFlags := 0;
Input.ki.time := 0;
Input.ki.dwExtraInfo := 0;
Inputs[0] := Input;
Input.ki.dwFlags := KEYEVENTF_KEYUP;
Inputs[1] := Input;
SendInput(2, Inputs[0], SizeOf(Input));
end;
以上代码示例可以实现在Delphi中使用SendInput模拟鼠标点击和键盘按键事件。需要注意的是,在使用SendInput函数时,需要确保程序具有足够的权限,以便能够模拟输入事件。
云原生正发声
Elastic 实战工作坊
企业创新在线学堂
DBTalk技术分享会
Techo Day
云+社区技术沙龙[第9期]
企业创新在线学堂
领取专属 10元无门槛券
手把手带您无忧上云