Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# APPCOMMAND_VOLUME_UP和APPCOMMAND_VOLUME_DOWN的值是否真的重要,只要它以0xA和0x9开头?_C#_.net_Winforms Interop - Fatal编程技术网

C# APPCOMMAND_VOLUME_UP和APPCOMMAND_VOLUME_DOWN的值是否真的重要,只要它以0xA和0x9开头?

C# APPCOMMAND_VOLUME_UP和APPCOMMAND_VOLUME_DOWN的值是否真的重要,只要它以0xA和0x9开头?,c#,.net,winforms-interop,C#,.net,Winforms Interop,我使用下面的代码以编程方式修改系统卷。老实说,我从互联网上从一家公司得到了相同的代码 我观察到,两个变量APPCOMMAND_VOLUME_UP和APPCOMMAND_VOLUME_DOWN的值实际上并不重要,只要UP值以0xA开始,DOWN值以0x9开始。我尝试过在0000和FFFF之间使用许多不同的值,用于向上和向下场景。价值观真的不重要吗 我对互操作调用不太了解。有人能解释一下这些价值观的意义吗 提前谢谢你 没有“价值”。LPARAM参数编码三个不同的属性: 例如,命令APPCOMMAN

我使用下面的代码以编程方式修改系统卷。老实说,我从互联网上从一家公司得到了相同的代码

我观察到,两个变量APPCOMMAND_VOLUME_UP和APPCOMMAND_VOLUME_DOWN的值实际上并不重要,只要UP值以0xA开始,DOWN值以0x9开始。我尝试过在0000和FFFF之间使用许多不同的值,用于向上和向下场景。价值观真的不重要吗

我对互操作调用不太了解。有人能解释一下这些价值观的意义吗

提前谢谢你

没有“价值”。LPARAM参数编码三个不同的属性:

  • 例如,命令APPCOMMAND\u VOLUME\u UP为10(0x0A)
  • 设备,指示命令是如何生成的,可以是键、鼠标或oem
  • “键”表示生成命令时哪些修改器有效。类似于键盘的shift/ctrl和鼠标的单击鼠标按钮
这三个属性的编码方式与C语言中位字段的工作方式相同。十六进制中的位模式是0xDCCCKKK,其中C是命令,D是设备,K是键

由于您自己合成了消息,因此您没有任何有意义的方法来报告设备或密钥。这也没关系,您应该简单地使用0(设备=键盘,没有修改键)。请注意,您现在使用的值不正确,0xAFFF没有使用正确的keys值,并且您的意思是CTRL和SHIFT键已按下。可能不足以最终混淆shell,这些修改器键不会影响特定命令的工作方式

因此,一个合理的实施方案应该是:

public enum AppCommand {
    VolumeDown = 9
    VolumeUp = 10,
    // etc..
}

private void SendAppCommand(AppCommand cmd) {
    var hwnd = new WindowInteropHelper(this).Handle;
    SendMessageW(hwnd, WM_APPCOMMAND, hwnd, (int)cmd << 16);
}
公共枚举AppCommand{
体积向下=9
体积p=10,
//等等。。
}
私有void SendAppCommand(AppCommand cmd){
var hwnd=new WindowInteropHelper(this).Handle;
SendMessageW(hwnd,WM_APPCOMMAND,hwnd,(int)cmd没有“值”。LPARAM参数编码三个不同的属性:

  • 例如,命令APPCOMMAND\u VOLUME\u UP为10(0x0A)
  • 设备,指示命令是如何生成的,可以是键、鼠标或oem
  • “键”表示生成命令时有效的修改器,如键盘的shift/ctrl键和鼠标的单击鼠标键
这三个属性的编码方式与C语言中位字段的工作方式相同。十六进制中的位模式是0xDCCCKK,其中C是命令,D是设备,K是键

由于您自己合成了消息,因此您没有任何有意义的方法来报告设备或按键。这也没关系,您应该只使用0(设备=键盘,没有修改键)。请注意,您现在使用的值不正确,0xAFFF没有使用正确的keys值,并且您说CTRL键和SHIFT键已关闭。这些修改键可能不足以最终混淆shell,它们不会影响特定命令的工作方式

因此,一个合理的实施方案应该是:

public enum AppCommand {
    VolumeDown = 9
    VolumeUp = 10,
    // etc..
}

private void SendAppCommand(AppCommand cmd) {
    var hwnd = new WindowInteropHelper(this).Handle;
    SendMessageW(hwnd, WM_APPCOMMAND, hwnd, (int)cmd << 16);
}
公共枚举AppCommand{
体积向下=9
体积p=10,
//等等。。
}
私有void SendAppCommand(AppCommand cmd){
var hwnd=new WindowInteropHelper(this).Handle;

SendMessageW(hwnd,WM_APPCOMMAND,hwnd,(int)cmd See See谢谢你的清晰解释。我现在明白了。因此我还有一个与此相关的问题。这些命令是否硬连接以增加/减少音量值2?我看到音量在增加时增加2级,在减少时减少2级?我的笔记本电脑音量键也会发生同样的情况。---让我知道f我需要将此作为一个单独的问题发布。感谢您的清晰解释。我现在明白了。因此我还有另一个与此相关的问题。这些命令是否硬连接以将音量增加/减少值2?我看到音量增加时增加2级,减少时减少2级?我的笔记本电脑vo也会发生同样的情况还有钥匙。----如果我需要将此作为单独的问题发布,请告诉我。