首页 | 文章中心 | 下载中心 | 本站特供 | 软硬件结合论坛 | 软硬件结合博客 | 
您现在的位置: 中国软硬件结合技术网 >> 文章中心 >> 软件技术 >> C#技术 >> 正文 用户登录 新用户注册
[推荐]在C#中监测任意键当前值(以部分常用键为例)          【字体:
在C#中监测任意键当前值(以部分常用键为例)
作者:awar    文章来源:本站原创    点击数:    更新时间:2004-10-18

创建C#工程并在其中创建KeyStatePanel 窗体如下:
public class KeyStatePanel : StatusBarPanel
{
    [DllImport("user32.dll")]
    private  static extern int  GetKeyState(int  nVirtKey);//获得指定键当前状态

    private const int VK_CAPITAL = 0x14;
    private const int VK_INSERT = 0x2D;
    private const int VK_NUMLOCK = 0x90;
    private const int VK_SCROLL = 0x91;

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

文章录入:awar    责任编辑:awar 
  • 上一篇文章: C#中Windows控件的焦点事件顺序

  • 下一篇文章: 正则表达式中的限定符
  • 发表评论】【告诉好友】【打印此文】【关闭窗口
          最新热点       最新推荐       相关文章
  • c#的好东西

  • 研究C#程序与基于COM的OPC数…

  • 如何使用C#访问POP3服务器

  • C#的四个基本技巧

  • C++ 对象的初始化 [转帖]

  • 用Visual C#编写屏幕保护程…

  • VC++中使用内存映射文件处理…

  • 利用C#重启远程计算机[转帖…

  • Visual C#弹出窗口杀手[转帖…

  • C#中的正则表达式

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)