ページ 11

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
随分と古いスレッドを引っ張ってきますね。 FindWindowEx(親ウィンドウのハンドル,子ウィンドウのハンドル,クラス名,ウィンドウ名)
「FindWindowEx」と検索するぐらい簡単だと思うんですけど...。

ABHelperに「FindWindowEx」の項目だけですがとりあえず作りました。内容はそのうち...。

Re: FindWindowExが使えません!ヘルプにものっていません 続編

Posted: 2006年4月05日(水) 14:56
by koko!yo
> 随分と古いスレッドを引っ張ってきますね。
> > 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)