日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

Search Results

カテゴリー: Delphi/目次
2005.06.16

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;


この方法は、ユーザーの操作で影響を受けるので
普通に、アプリにイベントを送りには、別のやり方が有効。

カテゴリー: ぷろぐらみんぐ
2005.06.16

PR

[PR]