c# - 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?
解决方案
再看一下API 调用,我可以看到它在位掩码中包含三个单独的值lParam
:WM_APPCOMMAND
cmd
- 这是您所指的特定应用命令 [2 个字节]uDevice
- 表示生成输入的设备 [2 字节]dwKeys
- 表示按下了哪些虚拟键,如果有的话 [2 字节]
所有这些的值都lParam
单独包含在一个位掩码中,每个占 2 个字节。因此,它们的结构lParam
如下:
0xAADDKK
whereAA
表示APPCOMMAND
正在发送,DD
表示uDevice
,KK
表示dwKeys
。
考虑到这一点,为了发送APPCOMMAND_SAVE
(十进制 32,十六进制 0x20)的命令,没有uDevice
和没有dwKeys
正确lParam
使用的值是:
0x200000
关于你的另一点:
MS docs 说#define WM_APPCOMMAND / 0x0319 但这似乎没有任何区别。我对零符号有某种问题。0x319 是如何工作的。
十六进制数字按照 base-10 运行,因为前导0
s 从数字中删除。因此 hex0x0319
与0x319
and0x00000319
相同,就像在 base-10中一样,与 and 确实1000
是相同的数字。01000
00000001000
推荐阅读
- vue-i18n - vue i18n Interpolation how to inject variables
- javascript - 在 iframe 中获取正文的背景颜色
- python - How to change a wallpaper to slideshow in Windows using Python or Batch?
- typescript - 如何去除vscode中的红色下划线错误?(打字稿)
- python - 使用 djangocms 发布页面更改时出现“NodeAlreadySaved”错误
- flutter - how to Make whole page scrollable instead to GridView Builder in flutter?
- html - CSS - Align Buttons in the same line
- openvino - OpenVino toolkit training repo and pre-trained models
- flutter - How to resolve SocketException,errorno=7 in flutter Using Alert or SnackBar
- python - regex works fine on the limited input but script hangs when whole input file is given