mouse_event
mouse_event
超初心者ですいません
ボタンクリックすると、マウスカーソルが指定箇所に移動するようにしたかったのですが、移動しません。何か足りないのでしょうか?
AB4.01.02 WinXPです。
Sub MainWnd_CommandButton1_Click()
mouse_event(MOUSEEVENTF_ABSOLUTE,1000,800,0,0)
End Sub
ボタンクリックすると、マウスカーソルが指定箇所に移動するようにしたかったのですが、移動しません。何か足りないのでしょうか?
AB4.01.02 WinXPです。
Sub MainWnd_CommandButton1_Click()
mouse_event(MOUSEEVENTF_ABSOLUTE,1000,800,0,0)
End Sub
この API を使ってください。
ヘルプより。
SetCursorPos(X, Y)
int X; /* 水平位置 */
int Y; /* 垂直位置 */
SetCursorPos関数は、 カーソルの位置を指定されたスクリーン座標に移動します。設定した新しい座標が、 直前のClipCursor関数により設定されたスクリーンの長方形内にないときには、 カーソルが長方形内に収まるように、 Windowsが自動的にカーソルの座標を調整します。
パラメータ 説明
X カーソルの新しいx座標をスクリーン座標で指定します。
Y カーソルの新しいy座標をスクリーン座標で指定します。
戻り値
関数が正常に終了した場合は、 TRUEを返します。それ以外の場合は、 FALSEを返します。拡張エラー情報を取得するには、 GetLastError関数を使います。
ヘルプより。
SetCursorPos(X, Y)
int X; /* 水平位置 */
int Y; /* 垂直位置 */
SetCursorPos関数は、 カーソルの位置を指定されたスクリーン座標に移動します。設定した新しい座標が、 直前のClipCursor関数により設定されたスクリーンの長方形内にないときには、 カーソルが長方形内に収まるように、 Windowsが自動的にカーソルの座標を調整します。
パラメータ 説明
X カーソルの新しいx座標をスクリーン座標で指定します。
Y カーソルの新しいy座標をスクリーン座標で指定します。
戻り値
関数が正常に終了した場合は、 TRUEを返します。それ以外の場合は、 FALSEを返します。拡張エラー情報を取得するには、 GetLastError関数を使います。
> ヘルプより。
> SetCursorPos(X, Y)
>
> int X; /* 水平位置 */
> int Y; /* 垂直位置 */
>
ご返信ありがとうございます。
SetCursorPosにてボタンのある同一スクリーン上なら移動可能ということですね。試してみましたら、スクリーン上は移動可能でした。
投稿に言葉が足りませんでした^^;他のプログラムのウィンドウのボタンにマウス移動(移動しなくてもいいですが)してクリックしたかったのです。
mouse_eventのエラーもGetLastError関数で調査可能なのですか?デバッグでは何も入りませんでした。
再度、よろしくお願いします。
> SetCursorPos(X, Y)
>
> int X; /* 水平位置 */
> int Y; /* 垂直位置 */
>
ご返信ありがとうございます。
SetCursorPosにてボタンのある同一スクリーン上なら移動可能ということですね。試してみましたら、スクリーン上は移動可能でした。
投稿に言葉が足りませんでした^^;他のプログラムのウィンドウのボタンにマウス移動(移動しなくてもいいですが)してクリックしたかったのです。
mouse_eventのエラーもGetLastError関数で調査可能なのですか?デバッグでは何も入りませんでした。
再度、よろしくお願いします。
>他のプログラムのウィンドウのボタンにマウス移動(移動しなくてもいいですが)してクリックしたかったのです。
他のソフトを操作(今回は、ボタンクリック)するのでしたら、
以下の方法でどうでしょうか?
実行すると、電卓に 1が入力されます。
他のソフトを操作(今回は、ボタンクリック)するのでしたら、
以下の方法でどうでしょうか?
実行すると、電卓に 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
FindWindowExが使えません!ヘルプにものっていません
> >他のプログラムのウィンドウのボタンにマウス移動(移動しなくてもいいですが)してクリックしたかったのです。
> 他のソフトを操作(今回は、ボタンクリック)するのでしたら、
> 以下の方法でどうでしょうか?
> 実行すると、電卓に 1が入力されます。
>
>
>
>
> 他のソフトを操作(今回は、ボタンクリック)するのでしたら、
> 以下の方法でどうでしょうか?
> 実行すると、電卓に 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が使えません!ヘルプにものっていません
随分と古いスレッドを引っ張ってきますね。
「FindWindowEx」と検索するぐらい簡単だと思うんですけど...。
ABHelperに「FindWindowEx」の項目だけですがとりあえず作りました。内容はそのうち...。
[ここをクリックすると内容が表示されます]
FindWindowEx(親ウィンドウのハンドル,子ウィンドウのハンドル,クラス名,ウィンドウ名)コード: 全て選択
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」と検索するぐらい簡単だと思うんですけど...。
ABHelperに「FindWindowEx」の項目だけですがとりあえず作りました。内容はそのうち...。
Re: FindWindowExが使えません!ヘルプにものっていません 続編
> 随分と古いスレッドを引っ張ってきますね。
>
> 「FindWindowEx」と検索するぐらい簡単だと思うんですけど...。
>
> ABHelperに「FindWindowEx」の項目だけですがとりあえず作りました。内容はそのうち...。
返信・・・
7さん早速返答戴きありがとうございます。
初心者ながら頂いたコード通り やっていますが、ab自体が反応しません!
なぜ?・・・・困っています。
できれば、参考 ソースを添付していただけると感謝感激です。
また ABの使い方?または何か操作に足りないものがあるのでしょうか?
by koko!yo
>
[ここをクリックすると内容が表示されます]
> FindWindowEx(親ウィンドウのハンドル,子ウィンドウのハンドル,クラス名,ウィンドウ名)コード: 全て選択
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」と検索するぐらい簡単だと思うんですけど...。
>
> ABHelperに「FindWindowEx」の項目だけですがとりあえず作りました。内容はそのうち...。
返信・・・
7さん早速返答戴きありがとうございます。
初心者ながら頂いたコード通り やっていますが、ab自体が反応しません!
なぜ?・・・・困っています。
できれば、参考 ソースを添付していただけると感謝感激です。
また ABの使い方?または何か操作に足りないものがあるのでしょうか?
by koko!yo
Re: FindWindowExが使えません!ヘルプにものっていません 続編
> 初心者ながら頂いたコード通り やっていますが、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)