NumLockの制御について
VB5.0(SP3)で次のプログラムを作成しました。
キーボードからNumLockキーを押して状態をOFFにすると、プログラム側(タイマー関数内)でその状態をチェックし、状態をONに戻します。
しかし、次の動作をした時に問題が発生しました。
但し、この問題は、OSがWindowsNT4.0(SP6)の端末で発生するのですが、Windows2000/XP では発生しませんでした。
起動したフォーム画面にフォーカスがある間は問題ないのですが、フォーカスを外した状態でNumLockキーを押して状態をOFFにすると、ON/OFFが繰り返されてしまいます。
この時に、マウスをフォーム画面の上に持ってくるとその繰返し処理が止まります。
もちろん再度 NumLockキーを押しても止まります。
OSの問題なのでしょうか?それともプログラムが悪いのでしょうか?
下記にそのプログラムを表記します。
<プログラム>
フォーム(Form1)にタイマー(Timer1)を貼りつけただけです。
(Module1.bas)
Option Explicit
Public Const VK_NUMLOCK = &H90
Public Const KEYEVENTF_KEYUP = &H2
Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
(Form1.frm)
Option Explicit
Private Sub Form_Load()
Timer1.Interval = 100
End Sub
Private Sub Timer1_Timer()
On Error Resume Next
If GetKeyState(VK_NUMLOCK) = 0 Then
keybd_event VK_NUMLOCK, 0, 0, 0
keybd_event VK_NUMLOCK, 0, KEYEVENTF_KEYUP, 0
End If
End Sub
お礼
shigatsu、情報ありがとうございます。 やっぱりできるんですね。 MSDNを見ると入力ロケール識別子(旧キーボードレイアウト) を使うとできそうな感じがします。 シェアウェア使うのもいいんですが、せっかくだから自作したいなー なんておもっちゃってます。