2

我注意到 没有A/W变体WM_DEVMODECHANGE,但它在LPARAM. 我没有看到任何文档(我可以找到)说明这个字符串是窄的还是宽的。

有谁知道什么是适合的LPARAM

4

2 回答 2

3

WM_DEVMODECHANGE只是一个数字,而且只有其中一个。获得窄字符串还是宽字符串取决于窗口是否为 Unicode。这取决于您如何创建它,使用 CreateWindowExA 或 CreateWindowExW()。稍后您可以使用 IsWindowUnicode() 找到一些内容。

于 2012-09-28T16:17:00.120 回答
3

从您的评论到汉斯的回答,您正在发送消息。此消息通常与 一起发送SendMessageTimeout。现在,SendMessageTimeout有两个版本,SendMessageTimeoutWSendMessageTimeoutA。调用SendMessageTimeoutW时,必须提供 Unicode 文本,调用SendMessageTimeoutA时提供 ANSI 文本。

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

SendMessageW使用/ SendMessageAPostMessageW/等时完全相同PostMessageA

如果您调用SendMessageTimeoutW, using HWND_BROADCASTthen 您可以预期 ANSI 和 Unicode 窗口都会收到您的消息。消息传递系统确保将您发送的数据转换为接收消息的窗口的适当编码。

于 2012-09-29T09:23:14.037 回答