我有以下代码(基于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,但我不知道如何输入字符键。)
答案 0 :(得分:1)
这是怎么回事
基于this page,我认为这里发生了一些麻烦。
例如
(90 | (3 << 8))
返回858,其值为CTRL + SHIFT + Z
在上面的部分中,90是ASCII值“Z”。
3是ORing 4(对于CTRL)与1(对于SHIFT)得到的值。
我们在第2步中获得的值是左移8
我们在步骤3中获得的值与步骤1中的值进行OR运算
编辑: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