Как я могу преобразовать свойство Hotkey ярлыка для представления комбинации в стиле String или напрямую преобразовать значение в нужную комбинацию?Convert Shortcut Комбинация горячих клавиш с реальными ключами?
Я использую интерфейс 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.
EDIT:
О, и это то, что я пробовал:
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)
UPDATE:
Я пытаюсь это ...
Во-первых, я добавил это перечисление:
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))
Спасибо за всю информацию, но мне нужно немного больше помочь сделать это, вы сказали, как перевести 1601, но также мне нужно перевести комбинацию перечислимых ключей (номер 262226) на тот номер 1601, который шаги, которые мне нужно сделать. Чтобы дать вам пример, я хотел бы установить горячую клавишу следующим образом: «Dim hotkey = Keys.ControlKey или Keys.Shift or Keys.A», тогда процесс перевода этих ключей в правильное значение (1601) необходимо автоматизировать и а не вручную – ElektroStudios
Я обновил свой вопрос, добавив новый код, пожалуйста, ознакомьтесь с обновлением, спасибо. – ElektroStudios
Done !: 'DirectCast (lnk, IShellLinkW) .SetHotkey (Convert.ToInt32 (CInt (HotKey.Item1 & Hex (HotKey.Item2)), 16))' – ElektroStudios