我通过挂钩窗口消息遇到了麻烦。我需要检测窗口文本(标题)的变化,所以我拦截了有趣窗口的 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 消息都被拦截。