在 .NET 中为可执行文件快捷方式设置热键

Setting a hotkey for an executables shortcut in .NET

我有以下代码(基于 https://msdn.microsoft.com/en-us/library/windows/desktop/bb773992(v=vs.85).aspx

中的说明
Private Sub SetHotkey(FilePath As String)
    Const ssfPROGRAMS = 2            'Program Files

    Dim MyShell As Shell32.Shell = New Shell32.Shell
    Dim MyFolder As Shell32.Folder = MyShell.NameSpace(ssfPROGRAMS)

    If (MyFolder IsNot Nothing) Then
        Dim MyFolderItem As Shell32.FolderItem = MyFolder.ParseName(FilePath)
        If (MyFolderItem IsNot Nothing) Then
            Dim MyShellLink As ShellLinkObject = MyFolderItem.GetLink
            If (MyShellLink IsNot Nothing) Then
                MyShellLink.Hotkey = <<What goes here?>>
                MyShellLink.Save()
            End If
            MyShellLink = Nothing
        End If
        MyFolderItem = Nothing
    End If
End Sub

虽然我不确定将哪个值作为热键。例如,如果我想做 Ctrl + A​​lt + A​​。我会把什么价值? (我认为 Ctrl + A​​lt 是 6 但我不知道如何输入字符键)。

事情是这样的

根据this page,我认为这里有些小动作。

例如

(90 | (3 << 8)) returns 858 是 CTRL + SHIFT + Z

的值
  1. 在上面的部分,90是"Z"的ASCII值。

  2. 3 是通过 ORing 4(对于 CTRL)与 1(对于 SHIFT)得到的值。

  3. 第2步得到的值左移8位

  4. 我们在步骤 3 中得到的值与步骤 1 中的值进行或运算

编辑:ALT 的值为 4,CTRL 为 2,SHIFT 为 1

编辑 2:对于您的示例,CTRL+ALT+A 的值为 (65 | (6 << 8)),归结为 1601。

它在链接页面上说:

The virtual keyboard shortcut is in the low-order byte, and the modifier flags are in the high-order byte. The modifier flags can be a combination of the following values.

Virtual-Key Codes 中找到您的钥匙。这将进入低位字节。在您的示例中,A 的值为 0x41,或十进制 65。

对于高位字节,修饰符为shiftctrlalt扩展;分别等于 1、2、4 和 8。将您要使用的值相加,在您的情况下,ctrl + alt = 6。然后将其乘以 256 以移动它向上一个字节。这等于 1536.

加 65 + 1536 = 1601。这是 ctrl + alt + 的热键 一个

另一个例子:

MyShellLink.Hotkey = MakeWord(Keys.A, HotKeyModifiers.Control Or HotKeyModifiers.Alt)

使用:

Public Enum HotKeyModifiers
    Shift = 1
    Control = 2
    Alt = 4
    Extended = 8
End Enum

Public Function MakeWord(ByVal loByte As Byte, ByVal hiByte As Byte) As Short
    Return Convert.ToInt16(loByte Or (hiByte << 8))
End Function