首页 > 解决方案 > SendMessage 的会话十进制到十六进制值的问题

问题描述

我试图了解转换十六进制 int(十进制)和 IntrPtr 的规则。

我在某处读到它应该代表“更高的记忆”或类似的东西。

如果有人可以向我解释一下,那就太好了。

但实际上它只是以下内容:

我想使用 SendMessage 发送APPCOMMAND_SAVE(int 值 32)。

const int WM_APPCOMMAND = 0x319;

MS 文档说#define WM_APPCOMMAND / 0x 0 319 但这似乎没有任何区别。我对零符号有某种问题。0x319 是如何工作的。

所以我发现例如 vol up 是:

const int APPCOMMAND_VOLUME_UP = 0xA0000; // 10

现在我正在尝试将 APPCOMMAND_SAVE (32) 转换为正确的十六进制值:

const int APPCOMMAND_SAVE = 0x200000; //? Hex value of 32 is the right?

标签: c#memoryhexdecimal

解决方案


再看一下API 调用,我可以看到它在位掩码中包含三个单独的值lParamWM_APPCOMMAND

  • cmd- 这是您所指的特定应用命令 [2 个字节]
  • uDevice- 表示生成输入的设备 [2 字节]
  • dwKeys- 表示按下了哪些虚拟键,如果有的话 [2 字节]

所有这些的值都lParam单独包含在一个位掩码中,每个占 2 个字节。因此,它们的结构lParam如下:

0xAADDKK

whereAA表示APPCOMMAND正在发送,DD表示uDeviceKK表示dwKeys

考虑到这一点,为了发送APPCOMMAND_SAVE(十进制 32,十六进制 0x20)的命令,没有uDevice和没有dwKeys正确lParam使用的值是:

0x200000

关于你的另一点:

MS docs 说#define WM_APPCOMMAND / 0x0319 但这似乎没有任何区别。我对零符号有某种问题。0x319 是如何工作的。

十六进制数字按照 base-10 运行,因为前导0s 从数字中删除。因此 hex0x03190x319and0x00000319相同,就像在 base-10中一样,与 and 确实1000是相同的数字。0100000000001000


推荐阅读