返回首页

{A}{S0}简介
几个月前,我正在开发一个客户端桌面应用程序。完成的要求后,我特别加强UI的主要形式。在以前的版本的Microsoft Word(前2007年版)中,也有一些标签,这是可点击的,并反映到键盘的变化(详情如下),我想我的应用程序添加这些功能。
HTML代码的文档也得到了包括沿源zip文件。选择在HTML文件夹以查看它的index.html。切换键
几乎每一个键盘上有三个LED,即民锁定,大写锁定和滚动锁定。这些LED显示各自的键的状态。由于这些键在状态或关闭状态,其价值是1和0之间切换,所以这些都是所谓的切换键。还包括Insert键切换键,虽然目前还没有为它的LED,但其价值是ON(插入模式)或OFF(覆盖模式),所以它也是在这个类别中。
在我的应用程序,我想添加NUM LOCK和CAPS LOCK的状态。我googled了解决方案使用Microsoft.VisualBasic.Devices。这是一个非常简单的解决方案,但与一些限制。您只能读取键的状态,没有方法来设置键的状态。 (我不打算在这里讨论这个,我可能会为它写一个单独的职位)。申请截止日期非常接近,我不能够实现这个额外的功能,因为我曾计划。由于此功能不是由客户端请求,这是交付只读选项。目的
该职位的目的是获取和设置的CAPS LOCK和NUM LOCK等,从应用。背景
Win32 API提供了许多低级别的功能的访问该系统的硬件。由于高水平的安全性,这些功能都没有直接提供的。NET Framework。为了执行与硬件水平低交互,我们必须使用一些特殊的语法。NET中调用Win32 API的方法。
为此,System.Runtime.InteropServices命名空间,必须列入。
C语言风格之后,我们已经宣布的功能,使我们可以在代码中使用的方法。宣言

[DllImport("APIname.dll")]



internal static extern returnType 

MethodName (argument(s)); 
使用
您可以使用任何其他地方的方法这个方法:{C}WIN32 API使用的方法
Win32 API的方法已被用来达到预期的效果。
[DllImport("user32.dll")] 

internal static extern short GetKeyState(int keyCode);

GetKeyState方法返回通过关键代码参数指定的键的状态。返回值将是0,如果关闭,如果在1。参数
的keyCode:指定一个要检查的关键的虚拟键代码。代码必须是一个范围为1到254之间的值。有关完整列表,请参阅
为一个完整的描述。
[DllImport("user32.dll")]

static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

这个功能是有用的模拟按键的窗口具有焦点。参数
bVk:指定一个虚拟键代码。代码必须是一个范围为1到254之间的值。有关完整列表,请参阅虚拟键码。
bScan:指定一个关键的硬件扫描码。
dwFlags中:指定功能操作的各个方面。通常用于KEYEVENTF_EXTENDEDKEY或KEYEVENTF_KEYUP。如果指定的话,关键是被释放。如果没有指定,关键是郁闷。
dwExtraInfo:指定一个与击键相关的附加价值。
完整的描述。
注意:在测试应用程序,而不是虚拟键代码,我们将使用System.Keys枚举的地方需要。创建测试应用程序
在C#中创建新的Windows应用程序项目。从菜单放大器;控制箱的工具栏部分中,添加一个表单上的状态条。状态条上添加三个标签。它们分别命名为lblINS,lblNUM和lblCAPS。这是更好地设置其宽度为40。
DoubleClickEnabled这些标签属性设置为true。
这些标签的AutoSize属性设置为false。
这些标签生成DoubleClick事件处理双击动作,例如:表单事件
形式的KeyPreview属性设置为true。这将有助于通过子控件的父控件(表格)(更好地了解该物业,建设附加测试应用程序与此属性设置为false)按下的键。
在设计视图中,双击的形式来生成其Form_Load事件和调用方法UpdateKeys。它会读取键的当前状态,并相应地更新的形式。
private void Form1_Load(object sender, EventArgs e)

{

    // read the current status of the specified keys

    UpdateKeys();

}

的形式生成Form1_KeyUp的事件来处理按键事件(引发此事件时,按下一个键,然后释放)。
private void Form1_KeyUp(object sender, KeyEventArgs e)

{            

    if (e.KeyData == Keys.Insert)

    {

        UpdateInsert();

    }

    else if (e.KeyData == Keys.NumLock)

    {

        UpdateNUMLock();

    }

    else if (e.KeyData == Keys.CapsLock)

    {

        UpdateCAPSLock();

    }            

}
实用的方法PressKeyboardButton
这个方法需要的关键代码作为参数,并模拟一个按键事件,通过发送一个键向下消息操作系统的一个主要的消息。
private void PressKeyboardButton(Keys keyCode)

{

    const int KEYEVENTF_EXTENDEDKEY = 0x1;

    const int KEYEVENTF_KEYUP = 0x2;

 

    keybd_event((byte)keyCode, 0x45, KEYEVENTF_EXTENDEDKEY, 0);

    keybd_event((byte)keyCode, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);

}   
UpdateNUMLock
读取使用GetKeyState和更新的形式相应的NUM锁的状态。
this.Refresh()被称为结束,以确保发送重绘请求的形式更新。
private void UpdateNUMLock()

{

    bool NumLock = (GetKeyState((int)Keys.NumLock)) != 0;

  

    if (NumLock)

    {

         lblNUM.Text = "NUM";

    }

    else

    {

         lblNUM.Text = String.Empty;

    }

 

    this.Refresh();

}      

同样,大写锁定并插入其他方法也可以实施。结论
您的应用程序将能够反映状态的切换键。您也可以通过双击状态条上的标签更新从您的应用程序这些键的状态。
虽然我一直在阅读的文章和博客很长一段时间,现在我决定分享我的知识和经验,使我的贡献。我很想得到您的反馈,不要忘记率后,如果你喜欢它。历史2008年5月24日1.0.0.0首先释放

回答

评论会员:游客 时间:2011/12/16
Stepanus大卫Kurniawan
简单,但确实有用。谢谢!

展望未来的一篇文章,可以设置LED指示灯。 {S2}
评论会员:比拉尔海德尔 时间:2011/12/16
欢迎

但什么ü意味着二号线。 ?

微笑是一条曲线,集一切直....!{ BR}
访问我的
评论会员:游客 时间:2011/12/16
:快速回复感谢|。Stepanus大卫Kurniawan关于第二行,我是在匆匆找到如何获得CAPSLOCK状态昨天。要设置LED指示灯已经在您的文章{S2}
比拉尔海德尔
评论会员:游客 时间:2011/12/16
是啊,它可通过状态栏。微笑是一条曲线,集一切直....!{BR}访问我的imgsrc=http://www.orcode.com/upimg/2011_12_16_19_25_05_5.gif
。11Developer
评论会员:游客 时间:2011/12/16
u能PLZ后HW检查在Web窗体中的关键地位的帽子
比拉尔海德尔
评论会员:游客 时间:2011/12/16
甲肝看看这个链接:imgsrc=http://www.orcode.com/upimg/2011_12_16_19_25_05_7.gif,我HAV还没有测试它,这样的结果告诉我........imgsrc=http://www.orcode.com/upimg/2011_12_16_19_25_05_4.gif的微笑是一条曲线,集一切直....!{BR}访问我的imgsrc=http://www.orcode.com/upimg/2011_12_16_19_25_05_5.gif
。waqarsani
评论会员:游客 时间:2011/12/16
我要感谢您的工作!!!!!继续努力吧
比拉尔海德尔
评论会员:游客 时间:2011/12/16
thanx微笑是一条曲线,集一切直....!{BR}访问我的imgsrc=http://www.orcode.com/upimg/2011_12_16_19_25_05_5.gif
。Donsw
评论会员:好工作 时间:2011/12/16
比拉尔海德尔
评论会员:游客 时间:2011/12/16
thanx!微笑是一条曲线,集一切直....!{BR}访问我imgsrc=http://www.orcode.com/upimg/2011_12_16_19_25_05_5.gif
。Donsw
评论会员:游客 时间:2011/12/16
OK,谢谢,良好的主页,我喜欢它
。比拉尔海德尔
评论会员:游客 时间:2011/12/16
visitngthanx反馈页面也有imgsrc=http://www.orcode.com/upimg/2011_12_16_19_25_05_4.gif的微笑是一条曲线,集一切直....!{BR}访问我的imgsrc=http://www.orcode.com/upimg/2011_12_16_19_25_05_5.gif
会员4764437
评论会员:。 时间:2011/12/16
比拉尔海德尔
评论会员:游客 时间:2011/12/16
欢迎微笑是一条曲线,集一切直....!{BR}访问我的imgsrc=http://www.orcode.com/upimg/2011_12_16_19_25_05_5.gif
。OneSoftware
评论会员:游客 时间:2011/12/16
很好的样本!真的prety!你有我5美分关于威廉
比拉尔海德尔
评论会员:游客 时间:2011/12/16
为URThanx补充..!微笑是一条曲线,集一切直....!{BR}访问我的{A13}
。阿米尔穆斯塔法:有好文章...我已经阅读..好文章
我也米巴基斯坦和学生的MCS。
UR源代码的链接是不工作...请修复
感谢{中六}

阿米尔穆斯塔法
评论会员:比拉尔海德尔 时间:2011/12/16
最初,它被打破,但它现在已经更新....!{ BR} 尝试重新下载它。

微笑是一条曲线,集一切直....!{ BR}
访问我的{A13}
评论会员:。MojtabaVALI 时间:2011/12/16
垃圾邮件删除
评论会员:比拉尔海德尔 时间:2011/12/16
IM无法找到任何管理解决方案,让我们来获取和设置值。只得到选项是可用的。

微笑是一条曲线,集一切直....!{ BR}
评论会员:knoami 时间:2011/12/16
源代码的链接坏了,能否请您再上传?
评论会员:比拉尔海德尔 时间:2011/12/16
我米这个非常遗憾。 我会重新上传(星期一)代码和演示。

微笑是一条曲线,集一切直....!{ BR}
评论会员:比拉尔海德尔 时间:2011/12/16
做B4星期一...........!

微笑是一条曲线,集一切直....!{ BR}
评论会员:knoami 时间:2011/12/16
非常感谢。
评论会员:托尼贝穆德斯 时间:2011/12/16
源代码的链接被打破。