NumLockを自由に操作!!これでSendKeys {TAB} も怖くない!!
SendKey で NumLock が外れてしまって困っている人も多いはず。
これさえ使えば 邪悪といわれた SendKeys {TAB} も使える!!(?)




'===========================================================================
'    ファイル名    : basKeyState.bas
'    ファイル説明  : キーボードの状態 関連
'    作成者        : Uz
'                    E-Mail   : uz@violet.plala.or.jp
'                    HomePage : http://www1.plala.or.jp/uz/
'    作成日        : 1998/10/15 (Thu)
'    修正日        : 1998/10/15 (Thu)
'    備考          : なし
'===========================================================================
Option Explicit

' -- API 定数宣言
Private Const VK_NUMLOCK = &H90
Private Const VK_CAPITAL = &H14     '以下の関数ないの VK_NUMLOCK を VK_CAPITAL に置き換えれば
Private Const VK_SCROLL = &H91      'CapsLock の状態を操作できる(VK_SCROLLも同様)

' -- API 型宣言
Private Type KeyboardState
    State(255) As Byte
End Type

' -- API 関数宣言
Private Declare Function GetKeyboardState Lib "user32" (kbState As KeyboardState) As Long
Private Declare Function SetKeyboardState Lib "user32" (kbState As KeyboardState) As Long


'///////////////////////////////////////////////////////////////////////////
'      関数名    : GetNumLock
'      目的説明  : NumLockの状態を取得
'      前提条件  : なし
'      結果      : なし
'      引数      : なし
'      戻り値    : Boolean      True  -> On
'                               False -> Off
'      備考      : なし
'///////////////////////////////////////////////////////////////////////////
Public Function GetNumLock() As Boolean
    Dim kbState As KeyboardState
    
    Call GetKeyboardState(kbState)
    GetNumLock = (kbState.State(VK_NUMLOCK) = 1)
End Function

'///////////////////////////////////////////////////////////////////////////
'      関数名    : SetNumLock
'      目的説明  : NumLockの状態を設定する
'      前提条件  : なし
'      結果      : なし
'      引数      : bFlag    Boolean     True  -> On  に設定
'                                       False -> Off に設定
'      戻り値    : Boolean  設定前の状態
'      備考      : なし
'///////////////////////////////////////////////////////////////////////////
Public Function SetNumLock(bFlag As Boolean) As Boolean
    Dim kbState As KeyboardState
    
    Call GetKeyboardState(kbState)
    SetNumLock = kbState.State(VK_NUMLOCK)
    kbState.State(VK_NUMLOCK) = IIf(bFlag, 1, 0)
    Call SetKeyboardState(kbState)
End Function