900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Fn按键失灵后的软件替代方案

Fn按键失灵后的软件替代方案

时间:2023-06-04 03:04:47

相关推荐

Fn按键失灵后的软件替代方案

环境:windows

前言

笔记本的Fn键失灵了,虽然电脑自带了Fn与Ctrl键切换的功能,但为了使用Fn而牺牲左边的Ctrl键,简直不可接受。Fn提供的功能也是我适应白天和晚上不能缺少的功能。

网友们说这种情况可能拆下键盘,清理下金手指就好了,但一来麻烦,二来不一定能好。

实现

要替代Fn的组合键,就要设置快捷键,而windows下设置快捷键最方便的工具莫过于autohotkey了。而且可以发送按键,直接发送Fn+F5不就可以调整亮度了吗,so easy!分分钟搞定!

然而,现实很残酷!Fn的按键没有相应的编码?!而且抓取不到!且各硬件厂家的实现不一?

好吧,换个思路?能调整屏幕亮度就成!找到可使用wmi来调整屏幕亮度,powershell的代码如下:

::将屏幕的亮度设置为50,最小值为0,最大值为100(Get-WmiObject-Namespaceroot/WMI-ClassWmiMonitorBrightnessMethods).WmiSetBrightness(1,50)::获取当前屏幕亮度(Get-Ciminstance-Namespaceroot/WMI-ClassNameWmiMonitorBrightness).CurrentBrightness

vbscript的代码如下:

'将屏幕的亮度设置为50,最小值为0,最大值为100OnErrorResumeNextstrComputer="."SetobjWMIService=GetObject("winmgmts:\\"&strComputer&"\root\wmi")SetcolItems=objWMIService.ExecQuery("Select*fromWmiMonitorBrightnessMethods",,48)ForEachobjItemincolItemsobjItem.WmiSetBrightness(1,50)WScript.Echo""Next

'获取当前屏幕亮度OnErrorResumeNextstrComputer="."SetobjWMIService=GetObject("winmgmts:\\"&strComputer&"\root\wmi")SetcolItems=objWMIService.ExecQuery("Select*fromWmiMonitorBrightness",,48)ForEachobjItemincolItemsWScript.Echo"CurrentBrightness:"&objItem.CurrentBrightnessWScript.Echo""Next

转化为Autohotkey后的代码如下:

;设置屏幕亮度SetBrightNess(iSetBrigthNess){iSetBrigthNess:=Min(100,iSetBrigthNess);不大于100iSetBrigthNess:=Max(0,iSetBrigthNess);不小于0strComputer:="."objWMIService:=ComObjGet("winmgmts:\\".strComputer."\root\wmi")colItems:=objWMIService.ExecQuery("Select*fromWmiMonitorBrightnessMethods",ComObjMissing(),48)ForobjItemincolItems{objItem.WmiSetBrightness(1,iSetBrigthNess)}returniSetBrigthNess}

;获取屏幕亮度GetCurBrightNess(){strComputer:="."objWMIService:=ComObjGet("winmgmts:\\".strComputer."\root\wmi")colItems:=objWMIService.ExecQuery("Select*fromWmiMonitorBrightness",ComObjMissing(),48)iCurrentBrightness:=0ForobjItemincolItems{;~MsgBox,%"-----------------------------------";~."Win32_OperatingSysteminstance";~."-----------------------------------";~."Caption:".objItem.CurrentBrightnessiCurrentBrightness:=objItem.CurrentBrightness}returniCurrentBrightness}

完整的Autohotkey代码如下:

;Alt+LCtrl+F1静音!>^F1::Send{Volume_Mute};Alt+LCtrl+F2降低音量!>^F2::Send{Volume_Down};Alt+LCtrl+F3增加音量!>^F3::Send{Volume_Up};Alt+LCtrl+Left上一首!>^Left::Send{Media_Prev};Alt+LCtrl+Down暂停、播放!>^Down::Send{Media_Play_Pause};Alt+LCtrl+Right下一首!>^Right::Send{Media_Next};Alt+LCtrl+Up停止!>^Up::Send{Media_Stop}!>^F5::result:=GetCurBrightNess()--result;~MsgBox%"Result:"--resultSetBrightNess(result)return;Alt+LCtrl+F6增加亮度!>^F6::result:=GetCurBrightNess()++resultSetBrightNess(result)return;Alt+LCtrl+ESC退出程度!>^Esc::ExitApp;获取屏幕亮度GetCurBrightNess(){strComputer:="."objWMIService:=ComObjGet("winmgmts:\\".strComputer."\root\wmi")colItems:=objWMIService.ExecQuery("Select*fromWmiMonitorBrightness",ComObjMissing(),48)iCurrentBrightness:=0ForobjItemincolItems{;~MsgBox,%"-----------------------------------";~."Win32_OperatingSysteminstance";~."-----------------------------------";~."Caption:".objItem.CurrentBrightnessiCurrentBrightness:=objItem.CurrentBrightness}returniCurrentBrightness};设置屏幕亮度SetBrightNess(iSetBrigthNess){iSetBrigthNess:=Min(100,iSetBrigthNess);不大于100iSetBrigthNess:=Max(0,iSetBrigthNess);不小于0strComputer:="."objWMIService:=ComObjGet("winmgmts:\\".strComputer."\root\wmi")colItems:=objWMIService.ExecQuery("Select*fromWmiMonitorBrightnessMethods",ComObjMissing(),48)ForobjItemincolItems{objItem.WmiSetBrightness(1,iSetBrigthNess)}returniSetBrigthNess}

参考资料:

1./zh-cn/windows/desktop/WmiSdk/calling-a-method告诉了我在autohotkey中可以使用

"

objItem.WmiSetBrightness(1,iSetBrigthNess)

"来调用WmiSetBtightness()的函数,此前使用别的方式调用,返回了错误信息0x8004102F

2./help/wmi/index.htm?page=wmi_error_constants.htmwmi编程手册,中文版,可以先学习下基础知识

3./zh-cn/windows/desktop/WmiSdk/swbemservicesex-put对工具的帮助不是很大,但有个印象

4./zh-cn/windows/desktop/WmiSdk/creating-a-wmi-script基础知识,了解了解

5./zh-cn/windows/desktop/WmiSdk/swbemobject基础知识,了解了解

6./ONE_SIX_MIX/article/details/80286421对本文的帮助非常大,这个是c++的解决方案,但我一来不想安装vs,二来还有可以直接发送按键就能实现一部分功能,而这些,在c++中不清楚如何处理,想尽快搞个可用的工具。

7./p/41206522387b对本工具的帮助也非常大,之前只找到了powershell版本的可用代码,在autohotkey中调用powershell,来实现功能,可实际证明,这样太慢了,实在不好用,学习了这个以后直接在脚本中调用wmi,速度快多了。也就是目前可用的版本了

延伸思考

wmi可以监听进程的创建、退出消息。这个可以做启动客户端后,自动启动后台服务、停止服务的功能,而优化电脑的性能

autohotkey可以根据窗口的标题来执行动作,那么可以去掉win7桌面的删除文件时的确认窗口

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。