ホットキーの設定 <TOP>
ホットキーを設定します。例では「Ctrl+F]でMainformを最小化します。
RegisterHotKey ホットキーを設定
UnregisterHotKey ホットキーを解除
PeekMessage メッセージキューのメッセージを取得
WaitMessage スレッドにメッセージが無い場合他のスレッドに制御を移す
'================================================================ '= ホットキーを設定 '= (RegisterHotkey.bas) '================================================================ #include "Windows.bi" Type POINTAPI x As Long y As Long End Type Type MSG hWnd As Long Message As Long wParam As Long lParam As Long ntime As Long pt As POINTAPI End Type ' ホットキー(ショートカットキー)を登録 Declare Function Api_RegisterHotKey& Lib "user32" Alias "RegisterHotKey" (ByVal hWnd&, ByVal id&, ByVal fsModifiers&, ByVal vk&) ' ホットキー(ショートカットキー)の登録を削除 Declare Function Api_UnregisterHotKey& Lib "user32" Alias "UnregisterHotKey" (ByVal hWnd&, ByVal id&) ' メッセージキューのメッセージを取得 Declare Function Api_PeekMessage& Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd&, ByVal wMsgFilterMin&, ByVal wMsgFilterMax&, ByVal wRemoveMsg&) ' スレッドにメッセージがない場合はほかのスレッドに制御を移す Declare Function Api_WaitMessage& Lib "user32" Alias "WaitMessage" () #define WM_HOTKEY &H312 'RegisterHotKey関数で登録されたホットキーが押されたとき送られる #define MOD_ALT &H1 '[ALT] #define MOD_CONTROL &H2 '[Ctrl] #define MOD_SHIFT &H4 '[Shift] #define PM_REMOVE &H1 'メッセージをキューから削除 #define vbKeyF &H46 '(70)Fキー Var Shared hKey As Integer '================================================================ '= '================================================================ Declare Sub ProcessMessages() Sub ProcessMessages() Var Message As MSG Var Ret As Long 'kKeyがTrueになるまでLoop Do While Not hKey 'メッセージを待つ Ret = Api_WaitMessage 'ホットキーメッセージのチェック If Api_PeekMessage(Message, GethWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then 'フォームを最小化 MinimizeWindow End If 'イベント処理 CallEvent Loop End Sub '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Var Ret As Long hKey = False '「Ctrl + F」ホットキーの登録 Ret = Api_RegisterHotKey(GethWnd, &HBFFF, MOD_CONTROL, vbKeyF) 'ホットキーメッセージの処理 ProcessMessages End Sub '================================================================ '= '================================================================ Declare Sub MainForm_QueryClose edecl () Sub MainForm_QueryClose() Var Ret As Long hKey = True Ret = Api_UnregisterHotKey(GethWnd, &HBFFF) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End