画面に GUI を表示して実行するコンパイル済みのバイナリ プログラムがあるとします。Win32 の別のプログラムからツールバーにアクセスし、ボタンを見つけてクリックする必要があります。
ツールバーの Hwnd を見つける方法は知っていますが、ツールバーのボタンを列挙する方法がよくわかりません。Win32 呼び出しでそれを行う方法はありますか?
ツールバーの下にボタン ハンドルを表示できる Spy++ のようなツールはありますか? Spy++ はそれを行いません。
ありがとう
画面に GUI を表示して実行するコンパイル済みのバイナリ プログラムがあるとします。Win32 の別のプログラムからツールバーにアクセスし、ボタンを見つけてクリックする必要があります。
ツールバーの Hwnd を見つける方法は知っていますが、ツールバーのボタンを列挙する方法がよくわかりません。Win32 呼び出しでそれを行う方法はありますか?
ツールバーの下にボタン ハンドルを表示できる Spy++ のようなツールはありますか? Spy++ はそれを行いません。
ありがとう
ボタンをクリックすると、WM_COMMAND メッセージがメイン ウィンドウに送信されます。ツールバー ボタンのクリックをシミュレートすることはあまり実用的ではありません。より良い方法は、Spy++ を使用して WM_COMMAND メッセージとそのパラメーターを見つけることです。次に、プログラムでこの同じ WM_COMMAND メッセージを送信します。
AFAIR をHWND
呼び出すことで、ツールバー ボタンの を取得できますGetDlgItem
。最初のパラメータはHWND
ツールバーの で、2 番目のパラメータはボタンの ID (TBBUTTON
構造に設定したもの) です。このアプローチを使用するには、ボタン ID が必要です。
===編集===
@graham.reeds によって提案された EnumChildWindows に加えて、 を試すことができますSendInput
。ターゲット ウィンドウを最前面に移動し、ツールバーの左上隅の画面座標を (その HWND を使用して) 計算し、ターゲット ボタンの中央の XY オフセットを追加し、マウス クリックをその位置に送信します。(私はこのアプローチを使用して、IE ウィンドウ内にレンダリングされた Flash および Silverlight オブジェクトをクリックすることに成功しました。)