分享

C#检测任意键的前任值

 空城66 2014-10-25

创建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 = "";
        }
    }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多