我想在不添加Form類的情況下使用RegisterHotkey。將RegisterHotKey API與NativeWindow類一起使用?
現在我有一個「空項目(.NET Framework)Visual Basic」,其中包含兩個類,如下所示。
Imports System.Windows.Forms
Public Class AppCore
Inherits ApplicationContext
Public myHotkeys As New clsHotkey
Shared Sub main()
Console.WriteLine("starting " & Now)
Dim myAppCore As AppCore
myAppCore = New AppCore
System.Windows.Forms.Application.Run(myAppCore)
End Sub
Public Const MOD_CONTROL As Integer = &H11
Public Const MOD_SHIFT As Integer = &H10
Public Const MOD_ALT As Integer = &H1
Public Const WM_HOTKEY As Integer = &H312
Public Declare Function RegisterHotKey Lib "user32.dll" Alias "RegisterHotKey" (ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
Public Declare Function UnregisterHotKey Lib "user32.dll" Alias "UnregisterHotKey" (ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
Sub New()
RegisterHotKey(myHotkeys.Handle, 100, 0, Keys.F6)
RegisterHotKey(myHotkeys.Handle, 200, MOD_ALT, Keys.F7)
End Sub
End Class
Imports System.Windows.Forms
Public Class clsHotkey
Inherits NativeWindow
Public Const WM_HOTKEY As Integer = &H312
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
MyBase.WndProc(m)
Beep()
If m.Msg = WM_HOTKEY Then
Select Case CType(m.WParam, Integer)
Case 100
Console.WriteLine("ID 100")
Case 200
Console.WriteLine("ID 200")
End Select
End If
End Sub
End Class
現在,這將編譯沒有錯誤,並運行。
在clsHotKey的WndProc中,我放了一個Beep(),但是這個永遠不會被調用。
我用來構建它的原始示例在Form類上使用DefWndProc,但NativeWindow的DefWndProc不能根據IDE覆蓋。
我試過重新啓動計算機,以防萬一熱鍵的鉤子沒有釋放,但事實並非如此。
我不知道這裏有什麼問題。有什麼方法可以觀察Windows事件分發系統,也許可以找出消息結束的位置以及爲什麼它不觸發WndProc?
謝謝!
神奇的,這很好!現在我相信我有最簡單的熱鍵+系統菜單應用程序可行。我從來沒有想過檢查NativeWindow是否會初始化它的句柄,我認爲這基本上是唯一的目的,有這些函數的句柄。謝謝 !! – Shodan