对于WM_DEVMODECHANGE,设备名称应该是窄还是宽?

时间:2012-09-28 15:30:17

标签: c winapi unicode

我注意到A没有W / WM_DEVMODECHANGE个版本,但LPARAM需要一个字符串。我看到没有文件(我能找到)告诉这个字符串是窄还是宽。

有谁知道什么适合LPARAM

2 个答案:

答案 0 :(得分:3)

WM_DEVMODECHANGE只是一个数字,而且只有其中一个。是否获得窄字符串或宽字符串取决于窗口是否为Unicode。这取决于您使用CreateWindowExA或CreateWindowExW()创建它的方式。以后你可以用IsWindowUnicode()找到一些东西。

答案 1 :(得分:3)

从您的评论到Hans的回答,您正在发送消息。此邮件通常与SendMessageTimeout一起发送。现在,SendMessageTimeout有两个版本,SendMessageTimeoutWSendMessageTimeoutA。当您致电SendMessageTimeoutW时,您必须提供Unicode文本,当您致电SendMessageTimeoutA时,您需要提供ANSI文本。

因此,通过使用两个消息标识符来区分数据类型,而不是基于用于发送数据的函数。

使用SendMessageW / SendMessageAPostMessageW / PostMessageA等时,情况完全相同。

如果您使用SendMessageTimeoutW致电HWND_BROADCAST,那么您可以预期ANSI和Unicode窗口都会收到您的消息。消息传递系统确保您发送的数据转换为接收消息的窗口的相应编码。