他アプリケーションの画面を自動でダブルクリックしたい。 – プログラミング – Home

他アプリケーションの画面を自動でダブル...
 
通知
すべてクリア

他アプリケーションの画面を自動でダブルクリックしたい。


りょう
 りょう
(@りょう)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

SetCursolPosでマウスポインタを他アプリケーションの画面上まで
移動させることには成功したんですが、ダブルクリックさせるために
そのアプリケーションのウィンドウハンドルを取得しPostMessageでWM_LBUTTONDBLCLKを
送信してみたんですがダブルクリックが認識されていないようでした。
ちなみにハンドルは正常に取得できていました。
どうしてでしょうか?

もし分かる方がいらっしゃったら教えていただけないでしょうか?
よろしくお願いします。


引用解決済
トピックタグ
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

あくまで可能性の一つとしての話ですが。
ダブルクリックのメッセージをどのウィンドウが処理しているかが関係しているのでは?
必ずしもトップレベルウィンドウで処理されるとは限らないということです。
場合によっては、コントロールで処理されてたり。
関係しそうなウィンドウを色々取得してメッセージを投げてみてはいかがでしょうか。


返信引用
渋木宏明(ひどり)
 渋木宏明(ひどり)
(@渋木宏明(ひどり))
ゲスト
結合: 23年前
投稿: 196
 

>必ずしもトップレベルウィンドウで処理されるとは限らないということです。

ですね。

>関係しそうなウィンドウを色々取得してメッセージを投げてみてはいかがでしょうか。

あるいは、SendMessage() ではなく、mouse_event() または SendInput() を使うとか。


返信引用
たけっち
 たけっち
(@たけっち)
ゲスト
結合: 21年前
投稿: 1
 

りょう様。たけっちといいます。

>SetCursolPosでマウスポインタを他アプリケーションの画面上まで
>移動させることには成功したんですが・・・

ここに興味がわきましたので、よかったら手順を教えてもらえないでしょうか。

>そのアプリケーションのウィンドウハンドルを取得し・・・

ここもお願いしたいです。

なんか横入りですいません。ご迷惑だったら無視してください。


返信引用
maruo
 maruo
(@maruo)
ゲスト
結合: 22年前
投稿: 9
 

以前、別ウィンドウのボタンを押したいときに似たような現象に陥りました。

その際は、
::AttachThreadInput()
を使用して解決しました。

以下のコードは、
「別Window(CWnd* pTgtWnd)の中にあるボタン(CWnd* pPushBtn)を押す」
という処理です。

見当違いかも知れませんがご参考までに。

---------------------------------
・・・
//// ウィンドウをトップに移動
pTgtWnd->SetForegroundWindow();

//// ボタンの押下処理を行う
if( pPushBtn->m_hWnd != NULL )
{
DWORD dwPID;
DWORD dwTID = ::GetWindowThreadProcessId( pPushBtn->m_hWnd,
&dwPID );

//// 別スレッドへ入力処理をアタッチする
//// ※これを行わないとSetFocus()等が成功しない
::AttachThreadInput(::GetCurrentThreadId(), dwTID, TRUE);

//// 別スレッドのアプリへフォーカスをあてる
::SetFocus( pPushBtn->m_hWnd );

//// フォーカスをあてたボタンの押下処理をシュミレート
//// ※スペース押す=>離す
::SendMessage( pPushBtn->m_hWnd, WM_KEYDOWN, VK_SPACE,
0x00000001 );
::SendMessage( pPushBtn->m_hWnd, WM_KEYUP , VK_SPACE,
0x00000001 );

//// スレッドを切り離す
::AttachThreadInput(::GetCurrentThreadId(), dwTID, FALSE);
}
・・・
---------------------------------


返信引用
りょう
 りょう
(@りょう)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

>みなさま
解答ありがとうございます、また返事が遅れてすみませんでした。

>sugarさま
spyでウィンドウの構成を見てみたんですが、コマンドボタンと
メインウィンドウのみで構成されているようなのでどうやら別に
原因があるようです。解答ありがとうございました。

>渋木宏明(ひどり)さま
mouse_event() または SendInput() をつかって試してみます。
解答ありがとうございました。

>たけっちさま
SetCursolPosでのマウスポインタの移動はいたってシンプルで
パラメータにxとyの絶対座標をピクセル単位で指定して呼び出すだけです。
ウィンドウハンドルの取得はFindWindowで該当アプリケーションのタイトル名
を指定して呼び出します。

>maruoさま
マウスでのクリックはフォーカスが関係している可能性も考えていました。
SetActiveWindowやSetFocusを使ってみても効果が認められませんでした。
maruoさまのおっしゃるようにAttachThreadInputを使用してみます。
解答ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました