var j:integer; p : TPoint; begin GetCursorPos( p ); //得到当前鼠标座标 for j:=p.x to p.x+30 do begin //Showmessage(inttostr(j)); mouse_event(MOUSEEVENTF_MOVE,j,p.y,0,0); sleep(500); application.ProcessMessages(); end; end;
我做了一个例子 希望能抛砖引玉 procedure TForm1.Button1Click(Sender: TObject); var Arrow:integer; i,x,y:integer; begin Arrow:=1; y:=0; x:=0; for i:=0 to 100 do begin if Arrow=1 then begin Arrow:=2; x:=1; y:=0; end else begin Arrow:=1; y:=1; x:=0; end; Sleep(20); mouse_event(MOUSEEVENTF_MOVE,x,y,0,0); end;end;
var x:integer; begin for x:=0 to 150 do begin mouse_event(MOUSEEVENTF_MOVE,1,1,0,0); sleep(20); end; end;
我试过,sleep(1)都比mouse实际移动的还慢, 给你们看下我的远程控制mouse的move delete(gotstr,1,6); windows.getcursorpos(s); p.x:=strtoint(copy(gotstr,1,pos(',',gotstr)-1));//这是客户端mouse移动时发过的的从标。 p.y:=strtoint(copy(gotstr,pos(',',gotstr)+1,pos(';',gotstr)-1-pos(',',gotstr))); // mouse_event(MOUSEEVENTF_MOVE,30,30,0,0); for i:=5 downto 1 do //做5次显示移动过程 begin if ((s.x-p.x) mod i )<>0 then begin if (s.x-p.x)>0 then p.x:=p.x+((s.x-p.x) div i)+1 else p.x:=p.x-abs((s.x-p.x) div i)-1; end else if (s.x-p.x)>0 then p.x:=p.x+((s.x-p.x) div i) else p.x:=p.x-abs((s.x-p.x) div i); if ((s.y-p.y) mod i )<>0 then begin if (s.y-p.y)>0 then p.y:=p.y+((s.y-p.y) div i)+1 else p.y:=p.y-abs((s.y-p.y) div i)-1; end else if (s.y-p.y)>0 then p.y:=p.y+((s.y-p.y) div i) else p.y:=p.y-abs((s.y-p.y) div i); windows.setcursorpos(p.x,p.y); // sleep(1); end; 就这样如果取消sleep,mouse就一跳,一跳的!不取消的话结果这边mouse另一个动作到了 他的上一次移动还没完!
j:integer;
p : TPoint;
begin
GetCursorPos( p ); //得到当前鼠标座标
for j:=p.x to p.x+30 do begin
//Showmessage(inttostr(j));
mouse_event(MOUSEEVENTF_MOVE,j,p.y,0,0);
sleep(500);
application.ProcessMessages();
end;
end;
希望能抛砖引玉
procedure TForm1.Button1Click(Sender: TObject);
var
Arrow:integer;
i,x,y:integer;
begin
Arrow:=1;
y:=0;
x:=0;
for i:=0 to 100 do
begin
if Arrow=1 then
begin
Arrow:=2;
x:=1;
y:=0;
end else
begin
Arrow:=1;
y:=1;
x:=0;
end;
Sleep(20);
mouse_event(MOUSEEVENTF_MOVE,x,y,0,0);
end;end;
x:integer;
begin
for x:=0 to 150 do
begin
mouse_event(MOUSEEVENTF_MOVE,1,1,0,0);
sleep(20);
end;
end;
给你们看下我的远程控制mouse的move
delete(gotstr,1,6);
windows.getcursorpos(s);
p.x:=strtoint(copy(gotstr,1,pos(',',gotstr)-1));//这是客户端mouse移动时发过的的从标。
p.y:=strtoint(copy(gotstr,pos(',',gotstr)+1,pos(';',gotstr)-1-pos(',',gotstr)));
// mouse_event(MOUSEEVENTF_MOVE,30,30,0,0);
for i:=5 downto 1 do //做5次显示移动过程
begin
if ((s.x-p.x) mod i )<>0 then
begin
if (s.x-p.x)>0 then
p.x:=p.x+((s.x-p.x) div i)+1
else
p.x:=p.x-abs((s.x-p.x) div i)-1;
end
else
if (s.x-p.x)>0 then
p.x:=p.x+((s.x-p.x) div i)
else p.x:=p.x-abs((s.x-p.x) div i);
if ((s.y-p.y) mod i )<>0 then
begin
if (s.y-p.y)>0 then
p.y:=p.y+((s.y-p.y) div i)+1
else
p.y:=p.y-abs((s.y-p.y) div i)-1;
end
else
if (s.y-p.y)>0 then
p.y:=p.y+((s.y-p.y) div i)
else p.y:=p.y-abs((s.y-p.y) div i);
windows.setcursorpos(p.x,p.y);
// sleep(1);
end;
就这样如果取消sleep,mouse就一跳,一跳的!不取消的话结果这边mouse另一个动作到了
他的上一次移动还没完!
我的程序改一下就可以实现不是45度角的方向移动;
我跑...,
砰...(撞了)
我跑...,
你看我不到