我通過掛鉤窗口消息而陷入困境。我需要檢測窗口文本(標題)的變化,所以我攔截WM_SETTEXT消息的有趣窗口(我這樣做是因爲在窗口創建窗口標題沒有指定)。IntPtr在Windows消息中的字符串轉換
閱讀WM_SETTEXT文檔的文檔,lParam參數指定一個指向表示窗口文本的字符串的指針。
使用SendMessage將消息轉發到.NET應用程序。我在.NET應用程序中所做的是:
private static bool ProcessMessage(ref Message msg) {
...
string s = Marshal.PtrToStringAuto(msg.LParam) *
}
其中ProcessMessage是處理.NET窗體消息的例程。
我總是得到的是一個空字符串,這不是預期的結果。我嘗試了其他Marshal.PtrToString *方法,但沒有人工作。
我在做什麼錯在IntPtr到轉換字符串?
(*)請注意,我無法調試此代碼,因爲它會阻塞整個系統,因爲所有的Windows消息都被攔截。
賓果! .NET代碼在另一個進程中。我在想,衆所周知的消息參數可以在進程之間傳遞。 – Luca 2010-08-24 11:16:08
AFAIK,只有WM_GETTEXT指針在另一個進程中可用。這是特殊情況,內部使用內存映射文件來實現此消息。所有其他指針都是無效的。 – 2010-08-24 11:17:53
還有更多的東西,無論窗口是Unicode還是Ansi,它都很重要。 – 2010-08-24 12:16:15