Delphi/マウスを移動しよう♪
mouse_evenで マウスを 移動したり、クリックしたりできる。
マウスが移動するので、どうしても言うこと聞かないソフトを
自動でクリックさせるのに便利。
応用すると、マウス移動→クリック→入力などを ユーザーが操作したように
再現させることができる。
function Mouse_PositionTomouse_event_Point(APoint : TPoint) : TPoint;
var
R :TRect;
begin
if Not Windows.GetWindowRect(GetDesktopWindow,R) then
Result := Point(0,0)
else
begin
Result.X := Trunc(($FFFF)*(APoint.X/(R.Right-R.Left)));
Result.Y := Trunc(($FFFF)*(APoint.Y/(R.Bottom-R.Top)));
end;
end;
これは、独自関数。MOUSEEVENTF_ABSOLUTEのとき座標系が違うので変換。
迷惑な仕様だ・・・・
名前が長すぎるのでシンプルにしたいところ・・・・
ClickPt := Mouse_PositionTomouse_event_Point(Point(
100 , 200 ));
操作例
mouse_event(MOUSEEVENTF_MOVE+MOUSEEVENTF_ABSOLUTE
,ClickPt.X,ClickPt.Y,0,0);
mouse_event(MOUSEEVENTF_LEFTDOWN,ClickPt.X,ClickPt.Y,0,0);
mouse_event(MOUSEEVENTF_LEFTUP ,ClickPt.X,ClickPt.Y,0,0);
ついでに文字出力
procedure SendString(Text : String);
var
A_WMChar : TWMChar;
i : integer;
begin
for i := 1 to Length(Text) do
begin
Application.ProcessMessages;
A_WMChar.CharCode := Ord(Text[i]);
A_WMChar.KeyData := 1;
SendMessage(AHandle,WM_CHAR,A_WMChar.CharCode,A_WMChar.KeyData) ;
end;
end;
この方法は、ユーザーの操作で影響を受けるので
普通に、アプリにイベントを送りには、別のやり方が有効。