IDの取得にはGlobalAddAtom関数を使用してアトムを求めています。直接”1”とかIDを指定しても動作しました。ただヘルプをみるとGlobalAddAtom関数を使用して取得しろ!と書いてあるので他のアプリケーションとの競合を避けるためにも、その方がいいんでしょうね。
サンプルではControl+Shift+F1,Control+Shift+F2でメッセージボックスを出力しています。
Private SubForm_Load()
'アトムの取得
gintAtom1 = GlobalAddAtom("HOTKEY1")
gintAtom2 = GlobalAddAtom("HOTKEY2")
'一つ目のホットキーを登録
CallRegisterHotKey(Me.hwnd, gintAtom1, MOD_CONTROLOrMOD_SHIFT, VK_F1)
'二つ目のホットキーを登録
CallRegisterHotKey(Me.hwnd, gintAtom2, MOD_CONTROLOrMOD_SHIFT, VK_F2)
CallHook(Me.hwnd)
End Sub
Private SubForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'一つ目のホットキーを削除
CallUnregisterHotKey(Me.hwnd, gintAtom1)
'二つ目のホットキーを削除
CallUnregisterHotKey(Me.hwnd, gintAtom2)
'アトムの破棄
CallGlobalDeleteAtom(gintAtom1)
CallGlobalDeleteAtom(gintAtom2)
CallUnHook(Me.hwnd)
End Sub
'-------------------------------------------------------
' Module
'-------------------------------------------------------
Public Declare FunctionSetWindowLongLib"user32"Alias"SetWindowLongA" (ByValhwndAs Long,ByValnIndexAs Long,ByValdwNewLongAs Long)As Long
Public ConstGWL_WNDPROC = (-4)
Public Declare FunctionCallWindowProcLib"user32"Alias"CallWindowProcA" (ByVallpPrevWndFuncAs Long,ByValhwndAs Long,ByValMsgAs Long,ByValwParamAs Long,ByVallParamAs Long)As Long
Public Declare FunctionGlobalAddAtomLib"kernel32"Alias"GlobalAddAtomA" (ByVallpStringAs String)As Integer
Public Declare FunctionGlobalDeleteAtomLib"kernel32" (ByValnAtomAs Integer)As Integer
Public Declare FunctionRegisterHotKeyLib"user32" (ByValhwndAs Long,ByValidAs Long,ByValfsModifiersAs Long,ByValvkAs Long)As Long
Public Declare FunctionUnregisterHotKeyLib"user32" (ByValhwndAs Long,ByValidAs Long)As Long
Public ConstWM_HOTKEY = &H312
Public ConstVK_F1 = &H70
Public ConstVK_F2 = &H71
Public ConstVK_F3 = &H72
Public ConstVK_F4 = &H73
Public ConstVK_F5 = &H74
Public ConstVK_F6 = &H75
Public ConstVK_F7 = &H76
Public ConstVK_F8 = &H77
Public ConstVK_F9 = &H78
Public ConstVK_F10 = &H79
Public ConstVK_F11 = &H7A
Public ConstVK_F12 = &H7B
Public ConstVK_F13 = &H7C
Public ConstVK_F14 = &H7D
Public ConstVK_F15 = &H7E
Public ConstVK_F16 = &H7F
Public ConstVK_F17 = &H80
Public ConstVK_F18 = &H81
Public ConstVK_F19 = &H82
Public ConstVK_F20 = &H83
Public ConstVK_F21 = &H84
Public ConstVK_F22 = &H85
Public ConstVK_F23 = &H86
Public ConstVK_F24 = &H87
Public ConstMOD_ALT = &H1
Public ConstMOD_CONTROL = &H2
Public ConstMOD_SHIFT = &H4
PublicgintAtom1As Integer
PublicgintAtom2As Integer
PublicghWndAs Long
'-------------------------------------------------------
'
'-------------------------------------------------------
Public FunctionWndProc(ByValhwndAs Long,ByValuMsgAs Long,ByValwParamAs Long,ByVallParamAs Long)As Long
StaticbolWndProcCheckAs Boolean
IfNotbolWndProcCheckThen
bolWndProcCheck =True
Select CaseuMsg
CaseWM_HOTKEY
Select CasewParam
CasegintAtom1: MsgBox "一つ目のホットキーが押下されました!"
CasegintAtom2: MsgBox "二つ目のホットキーが押下されました!"
End Select
End Select
bolWndProcCheck =False
End If
WndProc = CallWindowProc(ghWnd, hwnd, uMsg, wParam, lParam)
End Function
Public SubHook(hwndAs Long)
ghWnd = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WndProc)
End Sub
Public SubUnHook(hwnd As Long)
DimlngretAs Long
IfghWnd <> 0Then
lngret = SetWindowLong(hwnd, GWL_WNDPROC, ghWnd)
End If
End Sub
DownLoad vbtips092.lzh 3KB (VB6.0)