potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

C# Spy++とメッセージを監視するアプリケーションの対象プラットフォームは揃える

Spy++でアプリケーションのメッセージを監視する場合はそれらの対象プラットフォームを揃える必要があります。対象プラットフォームが異なる場合、Spy++はメッセージを監視できません。詳細はIntroducing Spy++ - Visual Studio | Microsoft Docsを参照してください。

上記の原因は32ビット版Spy++ではGetWindowLong関数、64ビット版Spy++ではGetWindowLongPtr関数を使用することによると想像します。

メッセージ監視

Spy++ 32ビット向けアプリ(x86 64ビット向けアプリ(x64)
32ビット版(spyxx.exe
64ビット版(spyxx_amd64.exe

なお、Microsoft Visual Studio Community 2019 Previewが通常の場所にインストールされている場合、Spy++64は以下の場所にあります。

%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Preview\Common7\Tools\spyxx_amd64.exe

具体例として、x64アプリケーション(64ビットアプリケーション)のx86/x64ビット版Spy++によるウィンドウ情報を示します。

f:id:potisan:20210307224519p:plain
x64アプリケーションの32ビット版Spyにおける表示。対象プラットフォームが異なるのでウィンドウプロシージャーが取得できない。
f:id:potisan:20210307224620p:plain
x64アプリケーションの64ビット版Spyにおける表示。。対象プラットフォームが同じなのでウィンドウプロシージャーが取得できる。