HOW TO:监视系统的NumLock,CapsLock,ScrollLock,Insert状态

Author:水如烟


这个类要利用上面的鼠标键盘钩子类

StatusKeySateWatcher.EventArgs.vb 事件参数定义

Namespace  uWindows
    Partial 
Class  StatusKeySateWatcher
        
Public   Class  EventArgs
            
Inherits  System.EventArgs

            
Private  gIsEnabled  As   Boolean
            
Private  gMsgKey  As  MsgKeyEnum

            
Sub   New ( ByVal  msgkey  As  MsgKeyEnum,  ByVal  isenabled  As   Boolean )
                gMsgKey 
=  msgkey
                gIsEnabled 
=  isenabled
            
End Sub

            
Public   ReadOnly   Property  MsgKey()  As  MsgKeyEnum
                
Get
                    
Return  gMsgKey
                
End   Get
            
End Property

            
Public   ReadOnly   Property  IsEnabled()  As   Boolean
                
Get
                    
Return  gIsEnabled
                
End   Get
            
End Property

        
End Class

        
Public   Enum  MsgKeyEnum
            NumLock
            CapsLock
            ScrollLock
            Insert
        
End Enum
    
End Class
End Namespace


StatusKeySateWatcher.vb 功能键状态指示类

Namespace  uWindows
    
Public   Class  StatusKeySateWatcher
        
Public   Event  TimeChanged( ByVal  now  As  DateTime)
        
Public   Event  KeySateChanged( ByVal  sender  As   Object ByVal  e  As  StatusKeySateWatcher.EventArgs)

        
Private   WithEvents  gKeyboardHook  As   New  uWindows.MouseKeyboardHook
        
Private   WithEvents  gMainForm  As  Windows.Forms.Form
        
Private   WithEvents  gTimer  As   New  System.Timers.Timer( 1000 )

        
Sub   New ( ByVal  mainform  As  Windows.Forms.Form)
            gMainForm 
=  mainform
            Initialize()
        
End Sub

        
Private   Sub  Initialize()
            gKeyboardHook.Start(MouseKeyboardHook.HookWay.Keyboard)
            gTimer.Start()
        
End Sub

        
' 取各键现值
         Private   Sub  GetOriginalState()
            
Dim  sender  As   Object   =   Nothing
            
Dim  mEventArgs  As  StatusKeySateWatcher.EventArgs  =   Nothing
            mEventArgs 
=   New  StatusKeySateWatcher.EventArgs(MsgKeyEnum.NumLock,  Not  KeyIsEnabled(Windows.Forms.Keys.NumLock))
            
RaiseEvent  KeySateChanged(sender, mEventArgs)
            mEventArgs 
=   New  StatusKeySateWatcher.EventArgs(MsgKeyEnum.CapsLock,  Not  KeyIsEnabled(Windows.Forms.Keys.CapsLock))
            
RaiseEvent  KeySateChanged(sender, mEventArgs)
            mEventArgs 
=   New  StatusKeySateWatcher.EventArgs(MsgKeyEnum.ScrollLock,  Not  KeyIsEnabled(Windows.Forms.Keys.Scroll))
            
RaiseEvent  KeySateChanged(sender, mEventArgs)
            mEventArgs 
=   New  StatusKeySateWatcher.EventArgs(MsgKeyEnum.Insert,  Not  KeyIsEnabled(Windows.Forms.Keys.Insert))
            
RaiseEvent  KeySateChanged(sender, mEventArgs)
        
End Sub

        
Protected   Overrides   Sub  Finalize()
            gKeyboardHook.Stop()
            gTimer.Dispose()
            
MyBase .Finalize()
        
End Sub

        
Private   Sub  gMainForm_FormClosing( ByVal  sender  As   Object ByVal  e  As  System.Windows.Forms.FormClosingEventArgs)  Handles  gMainForm.FormClosing
            
Me .Finalize()
        
End Sub

        
Private   Sub  gMainForm_Load( ByVal  sender  As   Object ByVal  e  As  System.EventArgs)  Handles  gMainForm.Load
            
Me .GetOriginalState()
        
End Sub

        
Private   Sub  gKeyboardHook_KeyDown( ByVal  sender  As   Object ByVal  e  As  System.Windows.Forms.KeyEventArgs)  Handles  gKeyboardHook.KeyDown
            
Dim  mEventArgs  As  StatusKeySateWatcher.EventArgs  =   Nothing
            
Select   Case  e.KeyCode
                
Case  Windows.Forms.Keys.NumLock
                    mEventArgs 
=   New  StatusKeySateWatcher.EventArgs(MsgKeyEnum.NumLock, KeyIsEnabled(Windows.Forms.Keys.NumLock))
                    
RaiseEvent  KeySateChanged(sender, mEventArgs)
                
Case  Windows.Forms.Keys.CapsLock
                    mEventArgs 
=   New  StatusKeySateWatcher.EventArgs(MsgKeyEnum.CapsLock, KeyIsEnabled(Windows.Forms.Keys.CapsLock))
                    
RaiseEvent  KeySateChanged(sender, mEventArgs)
                
Case  Windows.Forms.Keys.Scroll
                    mEventArgs 
=   New  StatusKeySateWatcher.EventArgs(MsgKeyEnum.ScrollLock, KeyIsEnabled(Windows.Forms.Keys.Scroll))
                    
RaiseEvent  KeySateChanged(sender, mEventArgs)
                
Case  Windows.Forms.Keys.Insert
                    mEventArgs 
=   New  StatusKeySateWatcher.EventArgs(MsgKeyEnum.Insert, KeyIsEnabled(Windows.Forms.Keys.Insert))
                    
RaiseEvent  KeySateChanged(sender, mEventArgs)
            
End   Select

        
End Sub

        
Private   Function  KeyIsEnabled( ByVal  keycode  As  Windows.Forms.Keys)  As   Boolean
            
Return   Not   CType (SafeNativeMethods.GetKeyState(keycode),  Boolean )
        
End Function

        
Private   Sub  mTimer_Elapsed( ByVal  sender  As   Object ByVal  e  As  System.Timers.ElapsedEventArgs)  Handles  gTimer.Elapsed
            
RaiseEvent  TimeChanged(e.SignalTime)
        
End Sub

    
End Class
End Namespace


使用:

Public   Class  MainForm


    
Private   WithEvents  gKeyState  As   New  LzmTW.uWindows.StatusKeySateWatcher( Me )

    
Private   Sub  gKeyState_KeySateChanged( ByVal  sender  As   Object ByVal  e  As  LzmTW.uWindows.StatusKeySateWatcher.EventArgs)  Handles  gKeyState.KeySateChanged
        
Select   Case  e.MsgKey
            
Case  LzmTW.uWindows.StatusKeySateWatcher.MsgKeyEnum.NumLock
                
Me .NumLockToolStripStatusLabel.Enabled  =  e.IsEnabled
            
Case  LzmTW.uWindows.StatusKeySateWatcher.MsgKeyEnum.CapsLock
                
Me .CapsLockToolStripStatusLabel.Enabled  =  e.IsEnabled
            
Case  LzmTW.uWindows.StatusKeySateWatcher.MsgKeyEnum.ScrollLock
                
Me .ScrollLockToolStripStatusLabel.Enabled  =  e.IsEnabled
            
Case  LzmTW.uWindows.StatusKeySateWatcher.MsgKeyEnum.Insert
                
Me .InsertToolStripStatusLabel.Enabled  =  e.IsEnabled
        
End   Select
    
End Sub


    
Private   Sub  gKeyState_TimeChanged( ByVal  now  As   Date Handles  gKeyState.TimeChanged
        
Me .TimeToolStripStatusLabel.Text  =  now.ToString
    
End Sub

End Class
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值