ページ 1 / 1
mouse_event
Posted: 2005年7月16日(土) 09:32
by なおなお
超初心者ですいません
ボタンクリックすると、マウスカーソルが指定箇所に移動するようにしたかったのですが、移動しません。何か足りないのでしょうか?
AB4.01.02 WinXPです。
Sub MainWnd_CommandButton1_Click()
mouse_event(MOUSEEVENTF_ABSOLUTE,1000,800,0,0)
End Sub
Posted: 2005年7月16日(土) 11:43
by Abs
この API を使ってください。
ヘルプより。
SetCursorPos(X, Y)
int X; /* 水平位置 */
int Y; /* 垂直位置 */
SetCursorPos関数は、 カーソルの位置を指定されたスクリーン座標に移動します。設定した新しい座標が、 直前のClipCursor関数により設定されたスクリーンの長方形内にないときには、 カーソルが長方形内に収まるように、 Windowsが自動的にカーソルの座標を調整します。
パラメータ 説明
X カーソルの新しいx座標をスクリーン座標で指定します。
Y カーソルの新しいy座標をスクリーン座標で指定します。
戻り値
関数が正常に終了した場合は、 TRUEを返します。それ以外の場合は、 FALSEを返します。拡張エラー情報を取得するには、 GetLastError関数を使います。
Posted: 2005年7月16日(土) 13:13
by なおなお
> ヘルプより。
> SetCursorPos(X, Y)
>
> int X; /* 水平位置 */
> int Y; /* 垂直位置 */
>
ご返信ありがとうございます。
SetCursorPosにてボタンのある同一スクリーン上なら移動可能ということですね。試してみましたら、スクリーン上は移動可能でした。
投稿に言葉が足りませんでした^^;他のプログラムのウィンドウのボタンにマウス移動(移動しなくてもいいですが)してクリックしたかったのです。
mouse_eventのエラーもGetLastError関数で調査可能なのですか?デバッグでは何も入りませんでした。
再度、よろしくお願いします。
Posted: 2005年7月16日(土) 13:21
by なおなお
追伸
一応、他のウィンドウハンドルを取得して、クリックしたい位置は求めることができました。あとはクリックするだけなのです。それがうまくいかなくて。。^^:
Posted: 2005年7月16日(土) 15:59
by Abs
>他のプログラムのウィンドウのボタンにマウス移動(移動しなくてもいいですが)してクリックしたかったのです。
他のソフトを操作(今回は、ボタンクリック)するのでしたら、
以下の方法でどうでしょうか?
実行すると、電卓に 1が入力されます。
コード: 全て選択
ボタンのhWndを取得している場合。
Sub MainWnd_CommandButton1_Click()
Dim hCalc As HWND
Dim hBtn1 As HWND
'クラス名(SciCalc)は、バージョンにより異なるかも。
hCalc = FindWindow("SciCalc", "電卓")
hBtn1 = FindWindowEx(hCalc, NULL, "Button", "1")
PostMessage(hBtn1, BM_CLICK, 0, 0)
End Sub
コード: 全て選択
コントロールIDが判っている場合。
Sub MainWnd_CommandButton2_Click()
'クラス名(SciCalc)は、バージョンにより異なるかも。
'lParamにコントロールのhWndが必要なソフトもあるかも知れません。
PostMessage(FindWindow("SciCalc", "電卓"), WM_COMMAND, MAKELONG(125, BN_CLICKED), 0)
End Sub
Posted: 2005年7月16日(土) 17:49
by なおなお
Adsさん、ありがとうございます。
さっそく試してみます。
ついでに質問なんですが、別の方法を教えていただいてるということは、mouse_eventはABでは使えないんでしょうか?
私だけ使えないのでしょうか?
Posted: 2005年7月16日(土) 19:55
by Abs
>mouse_eventはABでは使えないんでしょうか?
試していませんが、そんな事ないと思いますよ。
mouse_eventの場合は、相手をアクティブにしたり、
マウスポインタを移動したりで面倒だったので
別の方法を紹介しました。
なので、私もあまり使ったことがないです。
Posted: 2005年7月17日(日) 00:09
by なおなお
いろいろな方法を教えていただきありがとうございました。
いろいろ試してみます。
FindWindowExが使えません!ヘルプにものっていません
Posted: 2006年4月05日(水) 10:01
by koko!yo
> >他のプログラムのウィンドウのボタンにマウス移動(移動しなくてもいいですが)してクリックしたかったのです。
> 他のソフトを操作(今回は、ボタンクリック)するのでしたら、
> 以下の方法でどうでしょうか?
> 実行すると、電卓に 1が入力されます。
>
>
コード: 全て選択
ボタンのhWndを取得している場合。
> Sub MainWnd_CommandButton1_Click()
> Dim hCalc As HWND
> Dim hBtn1 As HWND
>
> 'クラス名(SciCalc)は、バージョンにより異なるかも。
> hCalc = FindWindow("SciCalc", "電卓")
> hBtn1 = FindWindowEx(hCalc, NULL, "Button", "1")
> PostMessage(hBtn1, BM_CLICK, 0, 0)
>
> End Sub
>
>
コード: 全て選択
コントロールIDが判っている場合。
> Sub MainWnd_CommandButton2_Click()
>
> 'クラス名(SciCalc)は、バージョンにより異なるかも。
> 'lParamにコントロールのhWndが必要なソフトもあるかも知れません。
> PostMessage(FindWindow("SciCalc", "電卓"), WM_COMMAND, MAKELONG(125, BN_CLICKED), 0)
>
> End Sub
Re: FindWindowExが使えません!ヘルプにものっていません
Posted: 2006年4月05日(水) 10:15
by 7
随分と古いスレッドを引っ張ってきますね。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hwndParent As HWND,ByVal hwndChildAfter As HWND,ByVal lpClassName As BytePtr,ByVal lpWindowName As BytePtr) As HWND
FindWindowEx(親ウィンドウのハンドル,子ウィンドウのハンドル,クラス名,ウィンドウ名)
「FindWindowEx」と検索するぐらい簡単だと思うんですけど...。
ABHelperに「FindWindowEx」の項目だけですがとりあえず作りました。内容はそのうち...。
Re: FindWindowExが使えません!ヘルプにものっていません 続編
Posted: 2006年4月05日(水) 14:56
by koko!yo
> 随分と古いスレッドを引っ張ってきますね。
>
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hwndParent As HWND,ByVal hwndChildAfter As HWND,ByVal lpClassName As BytePtr,ByVal lpWindowName As BytePtr) As HWND
> FindWindowEx(親ウィンドウのハンドル,子ウィンドウのハンドル,クラス名,ウィンドウ名)
> 「FindWindowEx」と検索するぐらい簡単だと思うんですけど...。
>
> ABHelperに「FindWindowEx」の項目だけですがとりあえず作りました。内容はそのうち...。
返信・・・
7さん早速返答戴きありがとうございます。
初心者ながら頂いたコード通り やっていますが、ab自体が反応しません!
なぜ?・・・・困っています。
できれば、参考 ソースを添付していただけると感謝感激です。
また ABの使い方?または何か操作に足りないものがあるのでしょうか?
by koko!yo
Re: FindWindowExが使えません!ヘルプにものっていません 続編
Posted: 2006年4月05日(水) 16:58
by 7
> 初心者ながら頂いたコード通り やっていますが、ab自体が反応しません!
さっき示したコードをグローバル領域に書きましたか?
さっきのコードをグローバル領域に書いて、コマンドボタンを押した時に下のコードを実行したらしっかりと動いてくれます。
コード: 全て選択
Dim hNoteWnd As HWND
Dim hNoteEdit As HWND
ShellExecute(hMainWnd,"open","Notepad",NULL,NULL,SW_SHOW)
Sleep(3000)
hNoteWnd=FindWindowEx(0,0,"Notepad",0)
hNoteEdit=FindWindowEx(hNoteWnd,0,"Edit",0)
SendMessage(hNoteEdit,WM_SETTEXT,NULL,"メモ帳のエディットボックスに文字列を設定しちゃうよん" As LPARAM)