能否模拟鼠标跟踪点击?

myboor 2005-03-15 12:38:21
打射击游戏的时候突发奇想,能否设计一个程序,判断屏幕上的物体,并移动鼠标点击它。我想模拟点击是没有任何问题,关键是怎么判断屏幕上的物体,况且物体又是动来动去的。我开始想先建一个相同的物体图像,然后逐点移动,如果与屏幕上某块区域异或为0,就模拟点击,但是觉得效率太低了,大家有什么好点子,不妨畅所欲言,这以后再打游戏就是百战百胜了,呵呵!
...全文
221 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Blakhawk 2005-04-30
  • 打赏
  • 举报
回复
我现在把示列代码贴出来,不晓得对你有没有用,它里头模拟鼠标点击事件。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Panel1: TPanel;
Memo1: TMemo;
Button1: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Panel1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.Add('mouse:left click me');
end;

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbLeft then
//按下的是鼠标左键
begin
memo1.Lines.Add('mouse on button:left down at '+inttostr(x)+':'+inttostr(y));
end;
if button=mbRight then
//按下的是鼠标右键
begin
memo1.Lines.Add('mouse on button:right down at '+inttostr(x)+':'+inttostr(y));
end;
end;

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbLeft then
//弹起的是鼠标左键
begin
memo1.Lines.Add('mouse on button:left up at '+inttostr(x)+':'+inttostr(y));
end;
if button=mbRight then
//弹起的是鼠标右键
begin
memo1.Lines.Add('mouse on button:right up at '+inttostr(x)+':'+inttostr(y));
end;
end;

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
memo1.Lines.Add('mouse on button:move to '+inttostr(x)+':'+inttostr(y));
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
point:TPoint;
rnd:real;
begin
randomize;
point.x:=button1.left+3;
point.y:=button1.Top+3;
windows.ClientToScreen(form1.handle,point);
//在两个坐标系中转换坐标
Application.BringToFront;
//将程序放到前台,确保不会因发生误动作而执行了其它程序
setcursorpos(point.x,point.y);
//将光标移动到特定点
rnd:=random(6);
//产生随机数,后面的随机动作以此随机数为依据
case trunc(rnd) of
//根据产生随机数的不同而产生不同的鼠标动作
0:
begin
mouse_event(MOUSEEVENTF_LEFTUP,point.x,point.y,0,0);
//在点point处产生鼠标左键弹起动作
end;
1:
begin
mouse_event(MOUSEEVENTF_LEFTDOWN,point.x,point.y,0,0);
//在点point处产生鼠标左键按下动作
end;
2:
begin
mouse_event(MOUSEEVENTF_RIGHTUP,point.x,point.y,0,0);
//在点point处产生鼠标右键弹起动作
end;
3:
begin
mouse_event(MOUSEEVENTF_RIGHTDOWN,point.x,point.y,0,0);
//在点point处产生鼠标右键按下动作
end;
4:
begin
mouse_event(MOUSEEVENTF_LEFTDOWN,point.x,point.y,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,point.x,point.y,0,0);
//在点point处产生鼠标左键单击动作(单击实质就是鼠标先按下后弹起)
end;
5:
begin
mouse_event(MOUSEEVENTF_MOVE,trunc(rnd),trunc(rnd),0,0);
//在点point处产生鼠标移动动作
end;
end;// end case
end;

procedure TForm1.Panel1Click(Sender: TObject);
begin
timer1.Enabled:=false; //结束鼠标事件的产生
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Enabled:=true;
end;


end.
BCDV 2005-04-01
  • 打赏
  • 举报
回复
你可以先看看ACTOOL的源码,效率很高的
myboor 2005-04-01
  • 打赏
  • 举报
回复
抓图比较效率低啊
跟我的解决方法没区别啊
BCDV 2005-04-01
  • 打赏
  • 举报
回复
就是类似于按键精灵之类的东西吧,抓图来进行比较
BCDV 2005-04-01
  • 打赏
  • 举报
回复
有个这方面的源码,actools
myboor 2005-04-01
  • 打赏
  • 举报
回复
我是在打雷神,每次都被灭,郁闷。。。。
楼上老兄说的比较。。。,就是效率成问题啊
hillhere365 2005-04-01
  • 打赏
  • 举报
回复
关注
S.F. 2005-03-29
  • 打赏
  • 举报
回复
是什么游戏?要做的话不难啊,比较某区域,检查变动情况
myboor 2005-03-25
  • 打赏
  • 举报
回复
to:黑鹰
给兄弟们解释一下啊,等米下锅啊
myboor 2005-03-25
  • 打赏
  • 举报
回复
to:黑鹰
鼠标点击动作是很简单的,关键是识别物体,我们期待着呢
Blakhawk 2005-03-25
  • 打赏
  • 举报
回复
就是利用消息机制,发送鼠标的点击(按下,抬起)这样的两个动作啊.
至于你要去识别对象我也搞不清楚.
下次吧,我吧我那张光盘带来,把里面的代码贴上来给你们参考一下.
Blakhawk 2005-03-24
  • 打赏
  • 举报
回复
这是做游戏外挂的其中一种方法
Blakhawk 2005-03-24
  • 打赏
  • 举报
回复
完全没问题。
likepeace 2005-03-18
  • 打赏
  • 举报
回复
关注
zhaoshanmin1981 2005-03-18
  • 打赏
  • 举报
回复
我长期关注这个问题。。
myboor 2005-03-18
  • 打赏
  • 举报
回复
楼上的,那给个具体思路吧
kuki84 2005-03-17
  • 打赏
  • 举报
回复
myboor 2005-03-15
  • 打赏
  • 举报
回复
对啊,所以我也用一块图像逐点异或啊,全为0就说明一样啊,可惜效率太低
Sephil 2005-03-15
  • 打赏
  • 举报
回复
一般游戏里的物件都是画上去的,又没有实体的
大熊猫侯佩 2005-03-15
  • 打赏
  • 举报
回复
以前在 QB 上用的是 color
加载更多回复(2)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧