potisanのプログラミングメモ

プログラミング素人です。昔の自分を育ててくれたネット情報に少しでも貢献できるよう、情報を貯めていこうと思っています。Windows環境のC++やC#がメインです。

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における表示。。対象プラットフォームが同じなのでウィンドウプロシージャーが取得できる。