前提・実現したいこと
とあるソフトを使用していると、一定の間隔でメッセージボックスが表示されます。
手動でOKを押すのが手間だったので、自動でOKボタンをクリックするツールを作ろうと思いました。
プログラムの流れとしては、
OKボタンの位置にマウスカーソル移動
↓
クリックのイベント送信
という簡単な処理だけです。
発生している問題・エラーメッセージ
メッセージボックスのOKボタンの位置にカーソル移動はするのですが、OKボタンがクリックされません。
クリック自体は出来ているよう(他のウィンドウをその位置に置くとそのウィンドウが前面にきます)です。
ボタンをクリック出来るようにするには、どう改善すればいいのでしょうか?
該当のソースコード
MFCのダイアログベースで作成しています。
現在はテストの為にボタンが押された時に処理しようとしています。
ボタンのクリックのイベントで以下の処理を追加しました。
c++
1void CMFCApplication2Dlg::OnBnClickedButton1() 2{ 3 // ボタンの位置 4 SetCursorPos(1135, 603); 5 6 INPUT input = {}; 7 input.type = INPUT_MOUSE; 8 input.mi.dx = 0; 9 input.mi.dy = 0; 10 input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; 11 12 SendInput(1, &input, sizeof(INPUT)); 13 14 //mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 15 //mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 16 17 18}
試したこと
コメントアウトしている部分のソースでも試しましたが、結果は同じでした。
ウィンドウハンドルを取得して、メッセージを送信するという方法も行うと思いましたが、
少し調べるとメッセージボックスのウィンドウハンドルはWinApiでは取得できないと
情報があったので([リンク]別言語の情報ですが、同じWinApiのトピックなので参考にしました)、簡単にカーソル位置を移動させる方法にしようと思いました。
また、spy++も使いましたが、メッセージボックスのハンドルは取得できませんでした。
補足情報(FW/ツールのバージョンなど)
リンク
上記URLを参考にボタンクリックの処理は作成しました。
環境は
MFC
VisualStudio2017
windows7
です
表示されるメッセージボックスは、Windows標準のものになります(MessageBox関数で出るものと同じです)

回答2件
あなたの回答
tips
プレビュー