ホットキーの設定          <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