创建C#工程并在其中创建KeyStatePanel 窗体如下: public class KeyStatePanel : StatusBarPanel { [DllImport("user32.dll")] private static extern int GetKeyState(int nVirtKey);//获得指定键当前状态
private const int VK_CAPITAL = 0×14; private const int VK_INSERT = 0×2D; private const int VK_NUMLOCK = 0×90; private const int VK_SCROLL = 0×91;
public enum KeyStatePanelStyle : int { CapsLock = VK_CAPITAL, Insert = VK_INSERT, NumLock = VK_NUMLOCK, ScrollLock = VK_SCROLL }
KeyStatePanelStyle _keyStatePanelStyle;
public KeyStatePanelStyle KeyStyle { set { _keyStatePanelStyle = value;
_keyState = GetKeyState((int) _keyStatePanelStyle);//状态更新 UpdateText();//文本更新 } get { return _keyStatePanelStyle; } }
int _keyState = 0;
public KeyStatePanel(KeyStatePanelStyle styl) { this.KeyStyle = styl; Application.Idle += new EventHandler(Application_Idle);//添加事件处理方法 }
private void Application_Idle(object sender, EventArgs e) { int keyState = GetKeyState((int) _keyStatePanelStyle); if (keyState != _keyState) { _keyState = keyState; UpdateText(); } }
private void UpdateText() {//根据当前键值状态更新窗体状态栏文本 if (_keyState != 0) { switch (_keyStatePanelStyle) { case KeyStatePanelStyle.CapsLock: this.Text = "CAPS"; break; case KeyStatePanelStyle.Insert: this.Text = "INS"; break; case KeyStatePanelStyle.NumLock: this.Text = "NUM"; break; case KeyStatePanelStyle.ScrollLock: this.Text = "SCRL"; break; } } else { this.Text = ""; } } }
|