在 .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 + Alt + A。我会把什么价值? (我认为 Ctrl + Alt 是 6 但我不知道如何输入字符键)。
事情是这样的
根据this page,我认为这里有些小动作。
例如
(90 | (3 << 8))
returns 858 是 CTRL + SHIFT + Z
的值
在上面的部分,90是"Z"的ASCII值。
3 是通过 ORing 4(对于 CTRL)与 1(对于 SHIFT)得到的值。
第2步得到的值左移8位
我们在步骤 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。
对于高位字节,修饰符为shift、ctrl、alt、 扩展;分别等于 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
我有以下代码(基于 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 + Alt + A。我会把什么价值? (我认为 Ctrl + Alt 是 6 但我不知道如何输入字符键)。
事情是这样的
根据this page,我认为这里有些小动作。
例如
(90 | (3 << 8))
returns 858 是 CTRL + SHIFT + Z
在上面的部分,90是"Z"的ASCII值。
3 是通过 ORing 4(对于 CTRL)与 1(对于 SHIFT)得到的值。
第2步得到的值左移8位
我们在步骤 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。
对于高位字节,修饰符为shift、ctrl、alt、 扩展;分别等于 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