Dieses Beispielprogramm demonstriert das korrekte Registrieren eines systemweiten Hotkeys. Das Abfragen, ob die registrierte Tastenkombination gedrückt wurde, wird nicht umständlich via Polling realisiert, sondern windows-konform mittels Abfragen der entsprechenden Message. Mit diesem Code ist es auch für VB Programmierer möglich auf Tastendrücke zu reagieren, ohne dass sich die VB Anwendung im Vordergrund befinden muss. Fügen Sie zunächst nachfolgenden Code in ein Modul ein: Option Explicit ' ========================================================== ' VB Hotkey Demo. Systemweite Tastenkombination registrieren ' und abfragen ' ' 03.11.2001 Frank-Oliver Dzewas, software@dzewas.de ' ========================================================== Public Const WM_HOTKEY = &H312 Public Const GWL_WNDPROC = (-4) Public Const MOD_ALT = &H1 Public Const MOD_CONTROL = &H2 Public Const MOD_SHIFT = &H4 Public Const VK_F12 = &H7B Public Declare Function RegisterHotKey Lib "user32" ( _ ByVal hWnd As Long, _ ByVal id As Long, _ ByVal fsModifiers As Long, _ ByVal vk As Long) As Long Public Declare Function UnregisterHotKey Lib "user32" ( _ ByVal hWnd As Long, _ ByVal id As Long) As Long Public Declare Function GetLastError Lib "kernel32" () As Long Public Declare Function SetWindowLong Lib "user32" _ Alias "SetWindowLongA" ( _ ByVal hWnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Public Declare Function CallWindowProc Lib "user32" _ Alias "CallWindowProcA" ( _ ByVal lpPrevWndFunc As Long, _ ByVal hWnd As Long, _ ByVal Msg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Public Declare Function GlobalAddAtomA Lib "kernel32" ( _ ByVal lpString As String) As Long Public Declare Function GlobalDeleteAtom Lib "kernel32" ( _ ByVal nAtom As Long) As Long Public glAddressOfHotKeyPrevWndProc As Long Public glHotKeyAtom As Long Public Function HotkeyWndProc(ByVal lHwnd As Long, _ ByVal lMsg As Long, ByVal lwParam As Long, _ ByVal lParam As Long) As Long If lMsg = WM_HOTKEY Then ' Hier kommt die Message, wenn die via ' "RegisterHotKey" registrierte Tastenkombination ' gedrückt wurde... MsgBox "Hotkey wurde betätigt", vbInformation Or _ vbSystemModal End If ' !WndProc aufrufen und Rückgabewert durchreichen! HotkeyWndProc = CallWindowProc(glAddressOfHotKeyPrevWndProc, _ lHwnd, lMsg, lwParam, lParam) End Function Und hier der Code für die Form: Beim Laden der Form wird die gewünschte Tastenkombination (HotKey) registriert. In unserem Beispiel Strg+F12. Egal ob die Anwendung nun den Fokus hat oder sich irgendwo im Hintergrund tummelt - auf die Tastenkombination Strg+F12 kann gezielt eine bestimmte Aktion ausgeführt werden. ' ========================================================== ' VB Hotkey Demo. Systemweite Tastenkombination registrieren ' und abfragen ' ' 03.11.2001 Frank-Oliver Dzewas, software@dzewas.de ' ========================================================== Option Explicit Private Sub Form_Load() ' Systemweit eindeutigen Wert generieren lassen glHotKeyAtom = GlobalAddAtomA(CStr(&HBFFF)) If glHotKeyAtom = 0 Then MsgBox "GlobalAddAtomA() fehlgeschlagen" & vbCr & _ "Fehlercode: " & CStr(GetLastError()), vbExclamation End End If ' Hotkey systemweit registrieren. ' Hier "Strg + F12" If RegisterHotKey(Me.hWnd, glHotKeyAtom, MOD_CONTROL, _ VK_F12) = 0 Then MsgBox "RegisterHotKey() fehlgeschlagen" & vbCr & _ "Fehlercode: " & CStr(GetLastError()), vbExclamation End Else ' Wenn Hotkey registriert werden konnte, ' wird jetzt die Fensterprozedur umgeleitet, ' um die WM_HOTKEY Message abfragen zu können glAddressOfHotKeyPrevWndProc = SetWindowLong(Me.hWnd, _ GWL_WNDPROC, AddressOf HotkeyWndProc) If glAddressOfHotKeyPrevWndProc = 0 Then MsgBox "SetWindowLong() fehlgeschlagen" & vbCr & _ "Fehlercode: " & CStr(GetLastError()), vbExclamation End End If End If End Sub Beim Beenden der Anwendung muss natürlich der systemweite HotKey wieder entfernt werden! Private Sub Form_Unload(Cancel As Integer) ' Hotkey wieder entfernen If UnregisterHotKey(Me.hWnd, glHotKeyAtom) = 0 Then MsgBox "RegisterHotKey() fehlgeschlagen" & vbCr & _ "Fehlercode: " & CStr(GetLastError()), vbExclamation End If ' Adresse der Fensterprozedur wieder auf den ' ursprüglichen Wert setzen If glAddressOfHotKeyPrevWndProc Then If SetWindowLong(Me.hWnd, GWL_WNDPROC, _ glAddressOfHotKeyPrevWndProc) = 0 Then MsgBox "SetWindowLong() fehlgeschlagen" & vbCr & _ "Fehlercode: " & CStr(GetLastError()), vbExclamation End If End If ' Eindeutigen Wert wieder löschen If GlobalDeleteAtom(glHotKeyAtom) <> 0 Then MsgBox "GlobalDeleteAtom() fehlgeschlagen" & vbCr & _ "Fehlercode: " & CStr(GetLastError()), vbExclamation End If End Sub Sollen mehrere HotKeys registriert werden, schauen Sie sich bitte folgenden Tipp an: Dieser Tipp wurde bereits 35.855 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevWizard für VB5/6 Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |