ウィンドウメッセージをフックして困っています。ウィンドウのテキスト (キャプション) の変更を検出する必要があるため、対象のウィンドウの WM_SETTEXT メッセージをインターセプトします (ウィンドウの作成時にウィンドウのキャプションが指定されていないため、これを行います)。
WM_SETTEXTドキュメントのドキュメントを読むと、 lParamパラメータはウィンドウ テキストを表す文字列へのポインタを指定します。
メッセージは、SendMessage を使用して .NET アプリケーションに転送されます。.NET アプリケーションで行うことは次のとおりです。
private static bool ProcessMessage(ref Message msg) {
...
string s = Marshal.PtrToStringAuto(msg.LParam) *
}
ここで、ProcessMessage は、.NET フォームのメッセージを処理するルーチンです。
私がいつも得るのは空の文字列です。これは期待される結果ではありません。他の Marshal.PtrToString* メソッドを試しましたが、誰も機能しませんでした。
IntPtrからStringへの変換で何が間違っていますか?
(*) すべての Windows メッセージが傍受されるため、システム全体がブロックされるため、このコードをデバッグできないことに注意してください。