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

时间:2017-04-04 14:52:55

标签: .net vb.net keyboard-shortcuts hotkeys

我有以下代码(基于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

我不确定将哪个值作为Hotkey。例如,如果我想要 Ctrl + Alt + A 。我会放什么价值? (我认为 Ctrl + Alt 是6,但我不知道如何输入字符键。)

3 个答案:

答案 0 :(得分:1)

这是怎么回事

基于this page,我认为这里发生了一些麻烦。

例如

(90 | (3 << 8))返回858,其值为CTRL + SHIFT + Z

  1. 在上面的部分中,90是ASCII值“Z”。

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

  3. 我们在第2步中获得的值是左移8

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

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

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

答案 1 :(得分:1)

它在链接页面上说:

  

虚拟键盘快捷键位于低位字节中,修饰符标志位于高位字节中。修饰符标志可以是以下值的组合。

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

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

添加65 + 1536 = 1601.这是 ctrl + alt +的热键   A

答案 2 :(得分:1)

另一个例子:

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