2017-04-04 29 views
1

我在https://msdn.microsoft.com/en-us/library/windows/desktop/bb773992(v=vs.85).aspx設置一個熱鍵爲一個可執行文件的快捷方式在.NET

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鍵+一個。我會把什麼樣的價值?(我想按Ctrl + Alt鍵 6,但我不知道如何在字符鍵放)。

回答

1

它說連結網頁上:

虛擬鍵盤快捷方式是在低位字節,而修改標誌爲在高位字節。修飾符標誌可以是以下值的組合。

Virtual-Key Codes找到你的鑰匙。這將進入低位字節。在你的例子,具有值0×41,或十進制65

對於高位字節中,改性劑是CTRL中高音,和擴展;分別等於1,2,4和8。加上你想要使用的值,在你的情況下,ctrl + alt = 6.然後乘以256,將其移位一個字節。這等於1536.

加65 + 1536 = 1601。這是你的熱鍵CTRL + ALT + 一個

1

這是怎麼回事

根據this page,我覺得這裏有一些小動作在發生。

例如

(90 | (3 << 8))返回858這是CTRL + SHIFT + Z

  1. 在上述零件值,90是 「Z」 的ASCII值。

  2. 3是ORing 4(對於CTRL)與1(對於SHIFT)得到的值。

  3. ,我們在步驟2中得到的值是由8

  4. 我們在第3步中得到的值左移在步驟或運算與值1

編輯:用於ALT值是4,CTRL爲2,SHIFT是1名

編輯2:對於你的例如,對於CTRL+ALT+A的值是(65 |(6 < < 8)),它歸結爲1601

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 
相關問題