ホットキー(ショートカットキー)を使うには

ホットキー(ショートカットキー)を使ってみます。
ホットキーとは、例えば「[F1]キーを押すとヘルプが開く」などです。

VBではホットキーのことを「ショートカットキー」と言っていますが、
普通はホットキーといいます。
VBの標準だけで使おうとするとメニューエディタで指定するしかありませんが、
メニューがない場合でもAPIを使えば簡単に使うことができます。

キーワードは「RegisterHotKey()関数」です。
RegisterHotKey()関数はホットキーを指定のウィンドウに関連付けしてくれます。

ただ、このままでは登録してもキーが押されたことが検出できないので
ウィンドウをCallWindowProc()関数を用いて、メッセージをフックすることで
キーが押されたことを検出します。

実行時の様子
'----------------------------- Form1 -----------------------------
Private Sub Form_Load()
    'ホットキーを登録する
    Call RegisterHotKey(Me.hWnd, &H100, 0, vbKeyF1)
    
    'ウィンドウプロシージャのアドレスを変更する
    hOldWndProc = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf WndProc)
End Sub

Private Sub Form_Unload(Cancel As Integer) '変更したウィンドウプロシージャを元に戻す Call SetWindowLong(Me.hWnd, GWL_WNDPROC, hOldWndProc) 'ホットキーを解除する Call UnregisterHotKey(Me.hWnd, &H100) End Sub
'----------------------------- Module1 -----------------------------
'ウィンドウに関するデータを取得
Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" _
    (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    'nIndexの定数
    Public Const GWL_WNDPROC = (-4)                 'ウィンドウ関数のアドレス
'Windowsメッセージを指定のウィンドウプロシージャに渡す
Public Declare Function CallWindowProc Lib "user32.dll" 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 hOldWndProc As Long                          '変更する前のウィンドウ関数のアドレスを保存する
Public Const WM_HOTKEY = &H312                      '登録されたホットキーが押された
'ホットキーを登録する
Public Declare Function RegisterHotKey Lib "user32.dll" _
    (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
'ホットキーを解除する
Public Declare Function UnregisterHotKey Lib "user32.dll" _
    (ByVal hWnd As Long, ByVal id As Long) As Long

Public Function WndProc(ByVal hWnd As Long, ByVal msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long If msg = WM_HOTKEY Then If wParam = &H100 Then MsgBox "[F1]が押された" End If End If '通常のメッセージを処理 WndProc = CallWindowProc(hOldWndProc, hWnd, msg, wParam, lParam) End Function
ダウンロード