qqaoshi888 发表于 2013-12-4 20:03

【求助】自己开发个Thinkpad 笔记本大小写灯驱动是否可行

如今购买T440P,用了几天发现没有键盘大小写指示灯真是不爽呀,虽然联想的快捷键可以指示,但是也只能在你按了CAPSLOCK键之后才提示,
真心觉得这样不舒服。。另外,搜狗输入法确实可以在那个托盘里面提示当前大小写,但是每次都你需要找到托盘再看,个人还是觉得麻烦。
最近几天研究了一下T440P键盘上带的几个指示灯,希望能从这几个指示灯上有所突破!
T440P键盘有以下指示灯:
1. FN键,该灯亮着代表恢复F1~F12为原来的功能,该指示灯灭代表F1~F12为快捷键,功能的是启用/禁用按键是FN+ESC.
2. F1键,该指示灯是耳机/扬声器静音指示灯, 系统静音时该灯会亮.
3.F4键,该指示灯是麦克风静音指示灯,只有启动windows才可以亮.

自己的想法是,F4的麦克风静音指示灯其实用不着,准备把这个灯用来显示大小写状态。当时不确定这个灯是不是键盘本身控制,还是可以通过驱动程序软件控制,自己做了个试验:
不使用键盘快捷键把麦克风静音,而是用鼠标在windows里面把麦克风静音,结果联想的快捷键马上就提示麦克风静音,并且这个灯也亮了,说明我们有办法通过软件来控制这个灯的。
另外,我认为仅仅是控制一个灯的亮/灭应该不会是非常复杂的API(实际是不是,大牛过来指正).

具体做法我计划从两个方面入手:
方法一 ,通过 hook 大小写键事件,当是大写时,给快捷键控制程序发送一个假的麦克风静音消息,欺骗快捷键驱动把该灯点亮。如果麦克风确实静音了,那么就每400MS给快捷键发送
“脉冲”新号,让其反复开关这个指示灯,达到闪烁的目的。小写的时候情况和这个相反。 目前我查了很多文档,好像没有发现WINDOWS消息里面有这个一个消息,还是我还没找到?

方法二,自己写个键盘驱动方式来实现以上目的,这个貌似会比方法一复杂,并且在驱动底层如何控制这个灯还需要再研究。

以上只是自己的想法,想写这个一个东西也是为了让TP的笔记本没那么难用,希望高级电工们多多帮助!!!

如果这个方法可行,那么T440X X240 系列都可以使用这种方法。。。。

[ Edited byqqaoshi888 on 2013-12-4 20:11 ]

必水目 发表于 2013-12-4 20:07

高手,,,

qqaoshi888 发表于 2013-12-4 20:10

@HOPE
@笨姐姐
@首席电工
@song版
…………^u^ ^u^

CCH 发表于 2013-12-4 20:11

露珠需要动力^c^ ^c^ ^c^

qqaoshi888 发表于 2013-12-4 20:15

回复 #4 CCH 的帖子

多谢!!!
希望大家齐心协力,把这个弄出来,造福51NB的机油们。。。^u^ ^u^

qqaoshi888 发表于 2013-12-4 20:18

@无证程序员。。。。
肿么把这个重要人物给忘了呢。。。^u^ ^u^

沙漠Yan 发表于 2013-12-4 21:30

支持折腾

Sonata 发表于 2013-12-4 21:42

qqaoshi888 发表于 2013-12-4 21:50

回复 #8 Sonata 的帖子

我捉摸着用驱动的方式有难度,所以觉得通过联想的的hotkey来控制这个灯。。。
现在还没有找到什么办法来欺骗快捷键驱动。。

dawensger 发表于 2013-12-4 21:55

我觉得吧,不大可能实现

冰冻的山泉 发表于 2013-12-4 22:35

屏幕上那个黑色的A多醒目的。

gzjzdavid 发表于 2013-12-4 22:37

嗯。。。还有个主意,就是A面上的THINKPAD那个 i头上的红点灯。。。改造成硬盘灯。。。这样我们就可以在笔记本背后放个镜子看看硬盘有没在读写。。。这主意怎么样?哈哈~~~

xuesencai 发表于 2013-12-5 05:54

有空把联想的hotkey反编译出来看看有没有可以对接的   这个估计难搞啊   还不确定每个型号用的都一样

nokia520 发表于 2013-12-5 10:32

记得以前winamp有个插件,可以让键盘上的灯随音乐节奏闪动,可以参考下。找到键盘灯的api后写成服务常驻系统监控下

多艰 发表于 2013-12-6 01:52

这个好,我是学机械电子工程的,我之前还想的是通过线路改造,以实现大小写和硬盘灯的指示~~~··我本来的想法是自己在键盘上方的跑马区安放三个指示灯,自己打孔什么的~~~·学机械的嘛,我有大批的同学在机械制造系,搞特种加工的很多,应该没有问题。不过现在想来就用现成的更好,可以把麦克风灯和静音灯都改掉。我觉得静音灯也没啥用,可以在屏幕右下方的小喇叭看嘛,平常的电脑好多就是在那里看的,应该能应合大多数人的习惯~~~··

ThinkPad-x1c 发表于 2013-12-6 10:13

有些人说话真是酸酸酸

yashjj 发表于 2013-12-7 01:01

感觉没必要,屏幕上热键显示非常醒目啊

simonzh 发表于 2013-12-7 07:32

高手一个

gerenuk 发表于 2013-12-7 08:30

这个思路有意思 顶一下

liudeee 发表于 2013-12-7 19:39

Windows 还好吧    关键是linux下好恼火。。。

kikou1986 发表于 2013-12-9 10:28

支持码农折腾

slangmgh 发表于 2014-4-1 09:38

我写的Hotkey就可以控制这个灯。

qqaoshi888 发表于 2014-4-1 16:30

回复 #22 slangmgh 的帖子

你好,我前段时间弄的这个,是通过控制虚拟麦克风实现的,总觉的不好,所以也没有放出来。
你那个Hotkey是直接驱动这个显示LED吗?
我没有联想库的头文件,后来想通过反汇编找到函数地址,然后通过远程注入的方式,这一段时间太忙也没时间搞了。

slangmgh 发表于 2014-4-1 21:50

回复 #23 qqaoshi888 的帖子

我是通过跟踪调试来确定联想的程序如何实现的,以下是代码:

bool SetMicrophoneMuteIndicator(BOOL mute) {
        if (IsThinkpad()) {
                HANDLE hDriver = CreateFile("\\\\.\\IBMPmDrv", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
                if (hDriver == INVALID_HANDLE_VALUE) {
                        return false;
                }

                DWORD bts;
                DWORD in = mute ? 2 : 0;
                bool ret = DeviceIoControl(hDriver, 0x2225AC, &in, 4, NULL, 0, &bts, NULL) != 0;
                CloseHandle(hDriver);
                return ret;
        } else {
                return false;
        }
}

qqaoshi888 发表于 2014-4-2 08:26

回复 #24 slangmgh 的帖子

非常感谢!!!!!^c^ ^c^ ^c^ ^c^ ^c^

waiting4you 发表于 2014-4-2 13:22

回复 #24 slangmgh 的帖子

厉害,这样就好弄了吧,驱动也不用了,直接来个Hook调用就行。联想不知道怎么想的

ccdos 发表于 2014-4-2 13:28

真是 很久很久 没注意到, 机器上面的 大写灯 已经没了

没就没吧

bluejebel 发表于 2014-4-2 21:14

重要,记下。

softking 发表于 2025-9-3 21:37

期待楼主更新,
页: [1]
查看完整版本: 【求助】自己开发个Thinkpad 笔记本大小写灯驱动是否可行