【发布时间】:2013-12-01 04:52:08
【问题描述】:
如何将快捷方式的 Hotkey 属性转换为字符串类型的组合或直接将值转换为正确的组合?
我正在使用IShellLink 接口从快捷方式中检索信息。
Private Shared lnk_hotkey As Short
interface IShellLinkW...
Sub GetHotkey(ByRef pwHotkey As Short)
Sub SetHotkey(ByVal wHotkey As Short)
end interface...
function to retrieve the hotkey...
DirectCast(lnk, IPersistFile).Load(ShortcutFile, 0) ' Load the shortcut
DirectCast(lnk, IShellLinkW).GetHotkey(lnk_hotkey) ' Retrieve the Hotkey
Return lnk_hotkey ' Return the hotkey
end function...
现在,我有一个快捷键,它用于 Hotkey 属性:
CONTROL + ALT + A
嗯,Keys 枚举是这样说的:
Keys.ControlKey = 17
Keys.Alt = 262144
Keys.A = 65
那么对于像Keys.ControlKey Or Keys.Alt Or Keys.A这样的组合,总和是:262226,但是IShellLink返回一个1601,那么这个用什么样的键表示呢?
我既需要一个解决方案来表示正确的快捷键热键,也需要为Sub SetHotkey(ByVal wHotkey As Short) mehotd 设置一个新的自定义热键。
编辑:
哦,这就是我尝试过的:
Dim ShortcutInfo As Shortcut.ShortcutInfo =
Shortcut.GetInfo("File.lnk")
MsgBox(ShortcutInfo.Hotkey) ' Result: 1601
MsgBox([Enum].Parse(GetType(Keys), ShortcutInfo.Hotkey).ToString)
' Result: 1601
Dim k As New KeysConverter
MsgBox(k.ConvertToString(1601).ToString)
' Result: (empty)
更新:
我正在尝试...
首先我添加了这个枚举:
Public Enum HotkeyModifiers As Short
SHIFT = 1
CONTROL = 2
ALT = 4
End Enum
所以流程应该自动化任务,但我不知道现在在这里做什么:
Public Shared Sub CreateShortcut(blah blah blah...
ByVal HotKey As Tuple(Of HotkeyModifiers, Keys))
MsgBox(CInt(HotKey.Item1 & HotKey.Item2))
' Result: 665
' I need to translate the 665 into the right value, 1601.
end sub
这就是我调用方法的方式:
Shortcut.CreateShortcut(Tuple.Create(HotkeyModifiers.CONTROL Or HotkeyModifiers.ALT, Keys.A))
【问题讨论】:
标签: .net vb.net winapi hotkeys keyboard-shortcuts