2022年2月19日土曜日

Spy++でアプリケーション操作に必要な情報を調べる

spy++は物騒なネーミングですが、VisualStudioに付随する由緒あるツールです。
今回はメモ帳に「a」と入力するプログラムを作るための調査手順を記載しています。

こちらの記事は、調査手順のみ。


1.Spy++の起動

Spy++はVisualStudiから「ツール」→「Spy++」を選択することで起動します。
もし「Spy++」が見つからない場合は「ツール」→「ツールと機能を取得」を選択し「個別のコンポーネント」→「C++コア機能」を選択します。

起動するとこんな感じ。



2.メモ帳のハンドラを見つける

まずは、メモ帳のハンドラを見つけます。
赤枠のボタンを選択し「ウィンドウ検索ダイアログ」を起動します


ウィンドウ検索ダイアログの「ファインダーツール」を使用します。
画像のマルのようなマークをマウスでドラッグ&ドロップして、メモ帳に移動します。


これは、ファインダーツールをメモ帳の「編集ウィンドウ」部分に持って行った状態。
文字入力する部分が太枠で囲まれます。

ウィンドウ検索ダイアログには、メモ帳の「編集ウィンドウ」の情報が表示されます。

3.編集ウィンドウのハンドラの構成を確認する

ウィンドウ検索ダイアログの「表示」で「プロパティ」を選択しプロパティで「同期」を押下すると、Spy++のメインウィンドウにハンドラの構成が表示されます。

メモ帳のメインハンドラの直下に、編集用のウィンドウが存在することがわかります。

この例では、メインハンドラの直下に編集ウィンドウが存在しましたが、複雑なプログラムでは、構成が複雑になっています。

4.メッセージを確認する

ウィンドウ検索ダイアログの「表示」で「メッセージ」を選択すると、メッセージ通知の確認ができます。
初期設定では大量のメッセージが流れてくるので「ログオプション」を起動し、必要なメッセージのみ表示するようにします。
今回は、キーボード操作時のメッセージを確認するので「キーボード」のみを選択します。


キーボードからメモ帳に「a」を入力しました。
画面はこのように表示されます。

先頭行のメッセージで右クリック→プロパティを選択すると、パラメータ確認ができます。

WM_KEYDOWN(0100) がポストされていて、パラメータとして「0x00000041」や「0x001E0001」が渡されています。
これは、こちらの記事のパラメータと同じものです。ソースと見比べると良いかなと思います。

メッセージログを確認すると、実際はWM_KEYDOWN以外にもWM_CHARやWM_KEYUPなど、複数のメッセージが送付されています。
作成するプログラムによって、この辺についても、実装に組みこむ必要があります。