SendMessage 的对话十进制到十六进制值的问题
Problem with conversation decimal to hex value for SendMessage
我想了解转换十六进制 int(十进制)和 IntrPtr 的规则是什么。
我在某处读到它应该代表“高级内存”或类似的东西。
如果有人能向我解释一下,那就太好了。
但其实无非就是以下几点:
我想用SendMessage发送APPCOMMAND_SAVE(int值32)。
const int WM_APPCOMMAND = 0x319;
MS 文档说 #define WM_APPCOMMAND / 0x0319 但这似乎没有任何区别。我对零号有一些问题。 0x319 是如何工作的。
所以我发现,例如音量是:
const int APPCOMMAND_VOLUME_UP = 0xA0000; // 10
现在我正在尝试将 APPCOMMAND_SAVE (32) 转换为正确的十六进制值:
const int APPCOMMAND_SAVE = 0x200000; //? Hex value of 32 is the right?
仔细查看 WM_APPCOMMAND
API 调用的 lParam
,我可以看到它在位掩码中包含三个独立的值:
cmd
- 这是您指的特定应用程序命令 [2 字节]
uDevice
- 指示生成输入的设备 [2 字节]
dwKeys
- 表示按下了哪些虚拟键,如果有 [2 字节]
所有这些的值作为位掩码单独包含在 lParam
中,每个位掩码占用 2 个字节。因此,它们被构造成 lParam
如下:
0xAADDKK
其中AA
表示发送APPCOMMAND
,DD
表示uDevice
,KK
表示dwKeys
。
考虑到这一点,为了发送 APPCOMMAND_SAVE
(十进制 32,十六进制 0x20)且没有 uDevice
和 dwKeys
的命令,正确的 lParam
使用的值是:
0x200000
关于你的另一点:
MS docs says #define WM_APPCOMMAND / 0x0319 But that doesn't seem to
make any difference. I have somehow problems with the zero signs. How
ever 0x319 works.
十六进制数字按照以 10 为基数的方式运行,因为从数字中删除了前导 0
。因此十六进制 0x0319
与 0x319
和 0x00000319
相同,就像在 base-10 中一样,1000
与 01000
和确实 00000001000
.
我想了解转换十六进制 int(十进制)和 IntrPtr 的规则是什么。
我在某处读到它应该代表“高级内存”或类似的东西。
如果有人能向我解释一下,那就太好了。
但其实无非就是以下几点:
我想用SendMessage发送APPCOMMAND_SAVE(int值32)。
const int WM_APPCOMMAND = 0x319;
MS 文档说 #define WM_APPCOMMAND / 0x0319 但这似乎没有任何区别。我对零号有一些问题。 0x319 是如何工作的。
所以我发现,例如音量是:
const int APPCOMMAND_VOLUME_UP = 0xA0000; // 10
现在我正在尝试将 APPCOMMAND_SAVE (32) 转换为正确的十六进制值:
const int APPCOMMAND_SAVE = 0x200000; //? Hex value of 32 is the right?
仔细查看 WM_APPCOMMAND
API 调用的 lParam
,我可以看到它在位掩码中包含三个独立的值:
cmd
- 这是您指的特定应用程序命令 [2 字节]uDevice
- 指示生成输入的设备 [2 字节]dwKeys
- 表示按下了哪些虚拟键,如果有 [2 字节]
所有这些的值作为位掩码单独包含在 lParam
中,每个位掩码占用 2 个字节。因此,它们被构造成 lParam
如下:
0xAADDKK
其中AA
表示发送APPCOMMAND
,DD
表示uDevice
,KK
表示dwKeys
。
考虑到这一点,为了发送 APPCOMMAND_SAVE
(十进制 32,十六进制 0x20)且没有 uDevice
和 dwKeys
的命令,正确的 lParam
使用的值是:
0x200000
关于你的另一点:
MS docs says #define WM_APPCOMMAND / 0x0319 But that doesn't seem to make any difference. I have somehow problems with the zero signs. How ever 0x319 works.
十六进制数字按照以 10 为基数的方式运行,因为从数字中删除了前导 0
。因此十六进制 0x0319
与 0x319
和 0x00000319
相同,就像在 base-10 中一样,1000
与 01000
和确实 00000001000
.