Delphi发送后台鼠标点击消息

打开SPY++,拦截游戏的 鼠标消息 WM_LBUTTONDOWN,WM_LBUTTONUP

HWND FindWindow(
LPCTSTR lpClassName, // 通过查找窗口类名 获取句柄 nil
LPCTSTR lpWindowName // 通过查找窗口标题 获取句柄
);

LRESULT SendMessage(
HWND hWnd, // 目标窗口句柄 在这里由FindWindow获取
UINT Msg, // 发送消息类型 WM_LBUTTONDOWN WM_LBUTTONUP
WPARAM wParam, // 这个我们用不着
LPARAM lParam // 这个是鼠标点击 窗口的坐标 高位是Y,低位X
);

//鼠标软模拟:好处就是不会真的移动鼠标 开始按钮 坐标 x=378 y=384
这里的坐标是相对于窗口的坐标位置,而且XY一起用16进制表示出来,Y在高位,X在低位,假设只知道XY坐标,可以自行转换一下.

自行转换用shl位移
procedure TForm1.Button1Click(Sender: TObject);
var
a:dword;
begin
a:=378+384 shl 16;
ShowMessage (a.ToHexString); //$0180017A
end;

sendmessage(hookHwnd,messages.WM_LBUTTONDOWN ,0,$0180017A);// 按下鼠标左键
sendmessage(hookHwnd,messages.WM_LBUTTONUP ,0, $0180017A); //抬起鼠标左键

硬件模拟:会真的移动鼠标
//mouse_event(MOUSEEVENTF_LEFTDOWN,X ,Y , 0, 0);
//mouse_event(MOUSEEVENTF_LEFTUP,X ,Y , 0, 0);

Delphi 中,可以使用 Windows API 中的相关函数来向后台窗口发送模拟鼠标移动与点击操作。以下是一个示例代码,它使用了`PostMessage`函数,它可以向窗口发送指定的消息。 ```delphi // 引入 Windows API uses Windows; // 向窗口发送鼠标消息 procedure SendMouseMessage(Handle: HWND; Msg: Cardinal; X, Y: Integer); var lParam: LPARAM; begin lParam := MakeLParam(X, Y); PostMessage(Handle, Msg, 0, lParam); end; // 模拟鼠标移动 procedure SimulateMouseMove(Handle: HWND; X, Y: Integer); const WM_MOUSEMOVE = $0200; begin SendMouseMessage(Handle, WM_MOUSEMOVE, X, Y); end; // 模拟鼠标左键点击 procedure SimulateMouseLeftClick(Handle: HWND; X, Y: Integer); const WM_LBUTTONDOWN = $0201; WM_LBUTTONUP = $0202; begin SendMouseMessage(Handle, WM_LBUTTONDOWN, X, Y); SendMouseMessage(Handle, WM_LBUTTONUP, X, Y); end; // 模拟鼠标右键点击 procedure SimulateMouseRightClick(Handle: HWND; X, Y: Integer); const WM_RBUTTONDOWN = $0204; WM_RBUTTONUP = $0205; begin SendMouseMessage(Handle, WM_RBUTTONDOWN, X, Y); SendMouseMessage(Handle, WM_RBUTTONUP, X, Y); end; ``` 其中,`Handle`是目标窗口的句柄,`Msg`是要发送消息类型,`X`和`Y`是鼠标移动或点击的目标位置坐标,`WM_MOUSEMOVE`表示移动鼠标,`WM_LBUTTONDOWN`和`WM_LBUTTONUP`表示鼠标左键按下和释放,`WM_RBUTTONDOWN`和`WM_RBUTTONUP`表示鼠标右键按下和释放。 需要注意的是,向后台窗口发送鼠标消息可能会对用户造成困扰,因此应该尽量避免在不必要的情况下使用。另外,如果目标窗口是由其他进程创建的,那么需要使用`FindWindow`函数来获取窗口句柄。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值