2016-01-01 26 views
1

我可以創建和使用RegisterHotkey和UnregisterHotkey()使用全系統熱鍵,如下:更多定製系統熱鍵

Enum HotkeyModifier As UShort 
    None = &H0 
    Alt = &H1 'Alt key 
    Control = &H2 
    Shift = &H4 
    Windows = &H8 
    WM_HOTKEY = &H312 
    Norepeat = &H4000 
End Enum 
' 


<Runtime.InteropServices.DllImport("User32.dll")> _ 
Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer, _ 
           ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer 
End Function 

<Runtime.InteropServices.DllImport("User32.dll")> _ 
Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer) As Integer 
End Function 
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 
    If m.Msg = HotkeyModifier.WM_HOTKEY Then 
     Dim id As IntPtr = m.WParam 
     Select Case (id.ToInt32) 
      Case 100 
       MessageBox.Show("You pressed ALT+D key combination") 
      Case 300 
       MessageBox.Show("You pressed CTRL+SHIFT+F12 key combination") 
      Case 399 
       SwitchTopMost() 
     End Select 
    End If 
    MyBase.WndProc(m) 
End Sub 
Friend Sub SwitchTopMost() 
    Me.TopMost = Not Me.TopMost 
    If Me.TopMost Then 
     Me.Show() 
     Me.ClientSize = New Size(Me.RestoreBounds.X, Me.RestoreBounds.Y) 
     Me.ClientSize = RestoreSize 
    Else : Me.Hide() 
    End If 
End Sub 
Private Sub Unregister(ByVal sender As System.Object, ByVal e As _ 
          System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing 
    UnregisterHotKey(Me.Handle, 100) 
    UnregisterHotKey(Me.Handle, 300) 
    UnregisterHotKey(Me.Handle, 399) 
End Sub 


Private Sub Register(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    RegisterHotKey(Me.Handle, 100, HotkeyModifier.Alt, Keys.D) 
    RegisterHotKey(Me.Handle, 300, HotkeyModifier.Control + HotkeyModifier.Shift, Keys.F12) 
    RegisterHotKey(Me.Handle, 399, HotkeyModifier.Alt, Keys.None) 
End Sub 

但有什麼,可以創造更多的可定製的全系統熱鍵樣空間 + 小號數字鎖定 + 控制 + P標籤 + 大寫鎖定 + F5?我用完了熱鍵。

有關這些熱鍵更多信息:Another post about hotkeys

也希望像this post沒有其他程序。

編輯:我寧願像上面的鏈接最喜歡的方式。

+0

號您可以用修改器(Ctrl鍵或Alt鍵)結合鍵,但不只是多個鍵,如空間+ S(這只是兩個字符)。您可以使用之類的東西Ctrl + P鍵,然後在處理,你可以檢查的NumLock的狀態,而不是作爲一個單一的組合(同樣適用於CapsLock鍵)的代碼。 –

+0

@KenWhite檢查是否會阻止Ctrl + P組合? – Happypig375

+0

沒有,檢查將完成* *後的按Ctrl + P發生,因此它無法阻止它。您會檢測到Ctrl + P,然後在處理程序中查看NumLock是否打開並作出相應的反應。想想這個邏輯:*如果組合鍵是Ctr + P那麼(如果NumLock打開,那麼做這個否則做)*。 –

回答

1

如果你堅持不使用方案,如AutoHotkey的,我看到了兩個可能的方法來實現你想要的:

  1. 首先,你可以做一個Timer,只是檢查是否按了GetAsycKeyState你想要的鑰匙每100ms左右。
  2. 更優雅的方式是使用低級別的鍵盤鉤子。我用this簡單的過去作爲一個起點,我的代碼(它是用C#編寫,但轉換,爲VB.NET應該不難)。
+0

我不想因爲沒有辦法把它們變成Visual Basic語言使用的東西,例如AutoHotkey。我不想有太多的可執行文件。 – Happypig375

+0

我認爲AutoIt有一個你可以在VB中使用的DLL。儘管AHK運行非常高效,所以我不會太在意使用它。 – Royce