如果没法不让那个灯亮,那么可不可以这样?每次收到CapsLock按键消息时,如果灯的状态是亮的,那么用API函数把它状态设为灭掉。有这样设置灯亮和暗的API函数吗?

解决方案 »

  1.   

    使用键盘过滤驱动实现,下面是开源的代码:KLog
      

  2.   

    可以偿试接收到CapsLock信息时再软件按一下CapsLock键
      

  3.   

    用软件按一下CapsLock怎么做?用什么API函数?
      

  4.   

    用软件按一下CapsLock怎么做?用什么API函数?keybd_event(VK_CAPITAL,0,0,0);
      

  5.   


    其实我本人正在做一个输入法软件,你知道中文输入法对按键的需求迫切。于是我就想到能不能把那个不常用的CapsLock键利用起来,这个键通常不怎么使用。我想利用这个键,作为选择第二个选项的默认键,比如我们打shijian,出来"1.时间 2.实践 3.世间",敲空格选择的是第一个,敲这个CapsLock则选择第二个"实践".其实程序的逻辑好处理,这个CapsLock键的虚拟键很容易处理.但是就是这个灯不好办.你把按键消息是处理了,可是能避免这个灯自动亮吗?
      

  6.   


    其实我本人正在做一个输入法软件,你知道中文输入法对按键的需求迫切。于是我就想到能不能把那个不常用的CapsLock键利用起来,这个键通常不怎么使用。我想利用这个键,作为选择第二个选项的默认键,比如我们打shijian,出来"1.时间 2.实践 3.世间",敲空格选择的是第一个,敲这个CapsLock则选择第二个"实践".其实程序的逻辑好处理,这个CapsLock键的虚拟键很容易处理.但是就是这个灯不好办.你把按键消息是处理了,可是能避免这个灯自动亮吗?低级键盘钩子无法控制指示灯,在键盘过滤驱动里面可以屏蔽
      

  7.   

    学习了。大家的方法都不错啊。系统钩子针对Windows操作系统的,那个指示灯在DOS下面貌似也能亮。与操作系统无关。
      

  8.   

    我现在采用的方法是用Windows的扫描码映射器,把CapsLock和~键换一下,这样,按CapsLock,灯不亮,出来的是~,而按~,灯却亮了,好象是从更底层更改了。
    教程:http://msdn.microsoft.com/zh-cn/windows/hardware/gg463447.aspx这个有几个缺点:一是要修改注册表,而且必须重启才能生效,二是所有的环境下都这样改了,不能随心所欲的需要改就改,不需要改就不改。我的程序是提供给别人用的,如果别人必须修改注册表,而且要重启,哪怕是我帮他自动修改注册表,也还要考虑这样改了以后,在所有情况下都改了,他会不会乐意的问题。所以不是最理想的解决方案。
      

  9.   

    我现在采用的方法是用Windows的扫描码映射器,把CapsLock和~键换一下,这样,按CapsLock,灯不亮,出来的是~,而按~,灯却亮了,好象是从更底层更改了。
    教程:http://msdn.microsoft.com/zh-cn/windows/hardware/gg463447.aspx这个有几个缺点:一是要修改注册表,而且必须重启才能生效,二是所有的环境下都这样改了,不能随心所欲的需要改就改,不需要改就不改。我的程序是提供给别人用的,如果别人必须修改注册表,而且要重启,哪怕是我帮他自动修改注册表,也还要考虑这样改了以后,在所有情况下都改了,他会不会乐意的问题。所以不是最理想的解决方案。

    你让人家CapsLock以后不能用了,人家铁定认为你这程序是病毒~~
    如果只有你程序运行的时候,CapsLock不能用,还是有问题,如果你的程序不再是当前激活的窗口,比如最小化了,这是别人要用其它的程序,要用到CapsLock,不也坑爹了。所以你还得保证你的程序不是几乎状态时CapsLock要还原。总觉得你最好找到一个暂时改变CapsLock行为的办法,这样就算你程序有bug,重启下电脑,CapsLock也能恢复正常。否则你这妥妥的流氓软件啊。
    其实个人觉得快捷键什么的自定义组合键就好,大家不都是这么做的吗?
      

  10.   

    我现在采用的方法是用Windows的扫描码映射器,把CapsLock和~键换一下,这样,按CapsLock,灯不亮,出来的是~,而按~,灯却亮了,好象是从更底层更改了。
    教程:http://msdn.microsoft.com/zh-cn/windows/hardware/gg463447.aspx这个有几个缺点:一是要修改注册表,而且必须重启才能生效,二是所有的环境下都这样改了,不能随心所欲的需要改就改,不需要改就不改。我的程序是提供给别人用的,如果别人必须修改注册表,而且要重启,哪怕是我帮他自动修改注册表,也还要考虑这样改了以后,在所有情况下都改了,他会不会乐意的问题。所以不是最理想的解决方案。

    你让人家CapsLock以后不能用了,人家铁定认为你这程序是病毒~~
    如果只有你程序运行的时候,CapsLock不能用,还是有问题,如果你的程序不再是当前激活的窗口,比如最小化了,这是别人要用其它的程序,要用到CapsLock,不也坑爹了。所以你还得保证你的程序不是几乎状态时CapsLock要还原。总觉得你最好找到一个暂时改变CapsLock行为的办法,这样就算你程序有bug,重启下电脑,CapsLock也能恢复正常。否则你这妥妥的流氓软件啊。
    其实个人觉得快捷键什么的自定义组合键就好,大家不都是这么做的吗?
    这不是流氓软件啊,这是Windows自己提供折扫描码映射,只不过知道的人比较少而已。CapsLock也不是不能用,而是被移到了另一个位置,的确,所有情况下都移过去了,因为这样一做,是系统级的更改,只要Windows启动,就被更改了。
      

  11.   

    我现在采用的方法是用Windows的扫描码映射器,把CapsLock和~键换一下,这样,按CapsLock,灯不亮,出来的是~,而按~,灯却亮了,好象是从更底层更改了。
    教程:http://msdn.microsoft.com/zh-cn/windows/hardware/gg463447.aspx这个有几个缺点:一是要修改注册表,而且必须重启才能生效,二是所有的环境下都这样改了,不能随心所欲的需要改就改,不需要改就不改。我的程序是提供给别人用的,如果别人必须修改注册表,而且要重启,哪怕是我帮他自动修改注册表,也还要考虑这样改了以后,在所有情况下都改了,他会不会乐意的问题。所以不是最理想的解决方案。

    你让人家CapsLock以后不能用了,人家铁定认为你这程序是病毒~~
    如果只有你程序运行的时候,CapsLock不能用,还是有问题,如果你的程序不再是当前激活的窗口,比如最小化了,这是别人要用其它的程序,要用到CapsLock,不也坑爹了。所以你还得保证你的程序不是几乎状态时CapsLock要还原。总觉得你最好找到一个暂时改变CapsLock行为的办法,这样就算你程序有bug,重启下电脑,CapsLock也能恢复正常。否则你这妥妥的流氓软件啊。
    其实个人觉得快捷键什么的自定义组合键就好,大家不都是这么做的吗?
    这不是流氓软件啊,这是Windows自己提供折扫描码映射,只不过知道的人比较少而已。CapsLock也不是不能用,而是被移到了另一个位置,的确,所有情况下都移过去了,因为这样一做,是系统级的更改,只要Windows启动,就被更改了。事实上你在程序内部偷偷把按键功能在系统层面上更改了,这就是流氓软件,因为对于一般用户来说,你改了之后,如果你忘记改回去,一般用户压根不知道怎么通过windows再改回来,然后对于一般用户,你的程序就是妥妥的病毒了~
    如果你希望找个容易按到的快捷键,可以试试shift + space这种组合键
      

  12.   


    其实我本人正在做一个输入法软件,你知道中文输入法对按键的需求迫切。于是我就想到能不能把那个不常用的CapsLock键利用起来,这个键通常不怎么使用。我想利用这个键,作为选择第二个选项的默认键,比如我们打shijian,出来"1.时间 2.实践 3.世间",敲空格选择的是第一个,敲这个CapsLock则选择第二个"实践".其实程序的逻辑好处理,这个CapsLock键的虚拟键很容易处理.但是就是这个灯不好办.你把按键消息是处理了,可是能避免这个灯自动亮吗?作为一个输入法, CapsLock键那么常用, 被你说成不常用......
    比如像我们打代码的, 是不是经常的要大小写切换的, 比如输入宏的时候, 你不可能一直按着Shift键吧.再有就是做软件就是要通用性, 你突然搞一个capslock来选择, 我想多数人都会很晕. 
      

  13.   

    可以,截获键盘消息,然后执行自己的代码。
    截获键盘消息可以第一响应OnKeyDown或者OnChar,第二可以用全局挂钩