gpt4 book ai didi

delphi - SetCursorPos 故障?

转载 作者:行者123 更新时间:2023-12-03 15:48:32 32 4
gpt4 key购买 nike

我想在delphi中编写一个程序来模拟以特定速度移动的鼠标指针(类似于AutoIT MouseMove函数)。要么是我的代码错误,要么是 SetCursorPos 在被调用太多次后出现故障。这是我的功能:

procedure MoveMouse ( X, Y, Speed : Integer);
var
P : TPoint;
NewX : Integer;
NewY : Integer;
begin
if X < 0 then exit;
if Y < 0 then exit;
if X > Screen.Height then exit;
if Y > Screen.Width then Exit;
repeat
GetCursorPos(P);
NewX := P.X;
NewY := P.Y;
if P.X <> X then begin
if P.X > X then begin
NewX := P.X - 1;
end else begin
NewX := P.X + 1;
end;
end;
if P.Y <> Y then begin
if P.Y > Y then begin
NewY := P.Y - 1;
end else begin
NewY := P.Y + 1;
end;
end;
sleep (Speed);
SetCursorPos(NewX, NewY);
until (P.X = X) and (P.Y = Y);
end;

我这样使用它:

procedure TForm1.btn1Click(Sender: TObject);
var
X : Integer;
Y : Integer;
begin
for X := 0 to Screen.Width do begin
for Y := 0 to Screen.Height do begin
MouseClick (X, Y, 1);
end;
end;
end;

由于某种原因,鼠标指针卡在某个 X 点,然后跳回 0,0,但这是为什么?

最佳答案

你的代码被卡住了,因为在重复循环中,条件

until (P.X = X) and (P.Y = Y);

当您传递值 X=0 和 Y=Screen.Height 时,永远不会满足,因此您必须修改循环以仅传递有效的屏幕坐标值

  for X := 0 to Screen.Width-1 do
for Y := 0 to Screen.Height-1 do
MoveMouse (X, Y, 1);

您还可以改进检查GetCursorPos结果的方法。和 SetCursorPos功能。

procedure MoveMouse ( X, Y, Speed : Word);
var
P : TPoint;
NewX : Integer;
NewY : Integer;
begin
if X > Screen.Width-1 then Exit;
if Y > Screen.Height-1 then Exit;
repeat
if not GetCursorPos(P) then RaiseLastOSError;
NewX := P.X;
NewY := P.Y;
if P.X <> X then
begin
if P.X > X then
NewX := P.X - 1
else
NewX := P.X + 1;
end;

if P.Y <> Y then
begin
if P.Y > Y then
NewY := P.Y - 1
else
NewY := P.Y + 1
end;
Sleep (Speed);
if not SetCursorPos(NewX, NewY) then RaiseLastOSError;
until (P.X = X) and (P.Y = Y);
end;

关于delphi - SetCursorPos 故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14310040/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com