我注意到WM_DEVMODECHANGE
沒有A
/W
變化,但它在LPARAM
需要一個字符串。我看不到任何文檔(我可以找到)來判斷這個字符串是窄還是寬。WM_DEVMODECHANGE的設備名稱應該窄還是寬?
有沒有人知道什麼適合LPARAM
?
我注意到WM_DEVMODECHANGE
沒有A
/W
變化,但它在LPARAM
需要一個字符串。我看不到任何文檔(我可以找到)來判斷這個字符串是窄還是寬。WM_DEVMODECHANGE的設備名稱應該窄還是寬?
有沒有人知道什麼適合LPARAM
?
從您的意見到Hans的回答,您正在發送消息。此消息通常以SendMessageTimeout
發送。現在,SendMessageTimeout
有兩個版本,SendMessageTimeoutW
和SendMessageTimeoutA
。當您撥打SendMessageTimeoutW
時,您必須提供Unicode文本,並且當您致電SendMessageTimeoutA
時,您將提供ANSI文本。
因此,數據類型的區分不是通過具有兩個消息標識符來實現的,而是基於用於發送數據的函數。
當使用SendMessageW
/SendMessageA
,PostMessageW
/PostMessageA
等等時,也是如此。
如果您撥打SendMessageTimeoutW
,使用HWND_BROADCAST
,那麼您可以預期ANSI和Unicode窗口都會收到您的消息。消息傳遞系統可確保將您發送的數據轉換爲接收消息的窗口的適當編碼。
WM_DEVMODECHANGE
只是一個數字,只有其中一個。無論你是窄字符還是寬字符,都取決於窗口是否是Unicode。這取決於您如何使用CreateWindowExA或CreateWindowExW()創建它。還有一些你可以稍後用IsWindowUnicode()找到。
我發送此消息,在這種情況下。所以我會發送一個字符串在我的窗口的註冊格式... – Mordachai
呃,等等。當您自己生成它時,通常會將其廣播並使用SendMessageTimeout()。 –
謝謝。我應該檢查SendMessageTimeout上的A/W。 D'哦! :) – Mordachai