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.287 mal aufgerufen.
Anzeige
![]() ![]() ![]() (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. |
Neu! sevEingabe 3.0 ![]() Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Tipp des Monats ![]() Dieter Otter PopUp-Menü wird nicht angezeigt :-( In diesem Tipp verraten wir Ihnen, wie Sie Probleme mit PopUp-Menüs umgehen können, wenn diese unter bestimmten Umständen einfach nicht angezeigt werden. 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. |