プログラム中で,マウスを使わずにマウスをクリックしたいと考えています.今現在,以下のようにコードを書いています.
スクリーン座標系の座標(10, 10)をクリックしたいと考えています.
SendMessage(HWND_DESKTOP, WM_LBUTTONDOWN, 0, MakeLParam(10, 10));
SendMessage(HWND_DESKTOP, WM_LBUTTONUP, 0, MakeLParam(10, 10));
このように書いても,何も起きません.
そして,wparam, lparamの指定方法が良く分かりません.この質問から,皆さんお分かりかと思いますが,プログラム初心者です.
どなたかご教授お願いします.
勝手にリンクですが、http://yokohama.cool.ne.jp/chokuto/urawaza/api/SendMessage.html
SOさん,ごめんなさい.リンク先のページを参照しても,何だか良く分かりません.
試しに,フォームをもう一つ作り,もう一つのフォームをクリックするように試しました.
// Form1内
SendMessage(Form2.Handle, WM_LBUTTONDOWN, 0, MakeLParam(10, 10));
SendMessage(Form2.Handle, WM_LBUTTONUP, 0, MakeLParam(10, 10));
でも,下に隠れているウインドウがクリックされたような様子はありません.
スクリーン座標のどこかをクリックする,という目的だけであれば,
Mouse_Eventを使用する方法があります.
詳細は,Win32APIのヘルプを調べて下さい.
//====================================================================
// Mouse_Eventによる画面上の任意位置のクリック
// Mouse_Eventでマウスの座標値を絶対値で指定する場合,
// 画面の左上が(0,0),右下が((65537,65535)となる
//====================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
dwFlags : DWORD;
X,Y : Integer;
begin
dwFlags:=MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE;
{(対象座標値を(300,200)とした場合}
X:=Trunc(300/Screen.Width*65537);
Y:=Trunc(200/Screen.Height*65535);
dwFlags:=MOUSEEVENTF_MOVE+MOUSEEVENTF_LEFTDOWN+MOUSEEVENTF_ABSOLUTE;
{まず移動}
Mouse_Event(dwFlags,X,Y,0,0);
{クリック}
Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
Mouse_Event(MOUSEEVENTF_LEFTUP,0,0,0,0);
end;
ゴメンなさい.間違えました.訂正コードです.
//====================================================================
// Mouse_Eventによる画面上の任意位置のクリック
// Mouse_Eventでマウスの座標値を絶対値で指定する場合,
// 画面の左上が(0,0),右下が((65537,65535)となる
//====================================================================
procedure TForm1.Button4Click(Sender: TObject);
var
dwFlags : DWORD;
X,Y : Integer;
begin
dwFlags:=MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE;
{(対象座標値を(300,200)とした場合}
X:=Trunc(300/Screen.Width*65537);
Y:=Trunc(200/Screen.Height*65535);
{まず移動}
Mouse_Event(dwFlags,X,Y,0,0);
{クリック}
Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
Mouse_Event(MOUSEEVENTF_LEFTUP,0,0,0,0);
end;
キャー!(^-^)/
きれいにできました〜♪Mr.XRAYさん,大変ありがとうございました.
これからはヘルプ等をがんばって自分で読んで,解決できるように精進します.何かあると,人に頼ってしまう癖があり‥f(>_<)
Mr.XRAYさん,本当にどうもありがとうございました!!
>キャー!(^-^)/
変な声ださないで下さい !! (^_^);
もし,掲示板をご覧になっている方で,先程のコードを試してみたい方は
座標値として次の値を用いると,その動作がわかりやすいのではないかと
思います.
{(対象座標値をこのFormの左上とした場合}
X:=Trunc((Form1.Left+10)/Screen.Width*65537);
Y:=Trunc((Form1.Top+10)/Screen.Height*65535);
ツイート |