Hotkeys bzw. Shortcuts registrieren:
Form1
Command1
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Const VK_F1 = &H70
Const VK_F2 = &H71
Const VK_F3 = &H72
Const VK_F4 = &H73
'etc...
Const WM_SETHOTKEY = &H32
Private Sub Command1_Click()
Call SendMessage(Me.hwnd, WM_SETHOTKEY, VK_F4, 0&)
Me.WindowState = 1
MsgBox "Schließ diese Mesagebox und " _
& "betätige danach die F4-Taste!"
End Sub[/code
Komplexe Tastenkombis als Hotkey registrieren:
Form1
Command1
Modul1
Form:
<pre><code>Option Explicit
Private Sub Form_Load()
Call SetHotKey(Me.hWnd, &H1 + &H2, &H77) '<-- Tasten die du zusammen drückst
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call RemoveHotKey
End Sub
Private Sub Command1_Click()
App.TaskVisible = False
Me.Hide
End Sub Modul:
Option Explicit
Private Declare Function RegisterHotKey Lib "user32" (ByVal _
hWnd As Long, ByVal id As Long, ByVal fsModifiers As _
Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal _
hWnd As Long, ByVal id As Long) As Long
Private 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
Private Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex _
As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GlobalDeleteAtom Lib "kernel32" _
(ByVal nAtom As Integer) As Integer
Private Declare Function GlobalAddAtom Lib "kernel32" Alias _
"GlobalAddAtomA" (ByVal lpString As String) As Integer
Const GWL_WNDPROC As Long = (-4&)
Const WM_HOTKEY As Long = &H312&
Public Enum ModKeys
MOD_ALT = &H1
MOD_CONTROL = &H2
MOD_SHIFT = &H4
MOD_WIN = &H8
End Enum
Private OldProc As Long, hOwner As Long
Private iAtom As Integer
Public Sub SetHotKey(hWnd As Long, ModKey As ModKeys, _
vKey As Long)
hOwner = hWnd
iAtom = GlobalAddAtom("MyHotKey")
Call RegisterHotKey(hOwner, iAtom, ModKey, vKey)
OldProc = SetWindowLong(hOwner, GWL_WNDPROC, _
AddressOf WndProc)
End Sub
Public Sub RemoveHotKey()
If hOwner = 0 Then Exit Sub
Call UnregisterHotKey(hOwner, iAtom)
Call SetWindowLong(hOwner, GWL_WNDPROC, OldProc)
Call GlobalDeleteAtom(iAtom)
End Sub
Public Function WndProc(ByVal hWnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
If wMsg = WM_HOTKEY And wParam = iAtom Then
Form1.Show
Else
WndProc = CallWindowProc(OldProc, hWnd, wMsg, wParam, lParam)
End If
End Function Grüße |