有没有可以通过组合键快速在87键键盘上映射出小键盘来输入数字的工具

由于种种原因目前办公室的台式机使用的是一台87键的键盘,用了一段时间没有大问题,但始终觉得没有小键盘输入数字不方便。
想问问有没有一个快速映射的小工具,可以快速映射出一个区域作为小键盘输入数字使用。
比如通过组合键,左手按着Alt或者别的键,右手直接用功能区的PRTSCScrollLockPauseBreakInsertHomePageUpDeleteENDPageDown的按键,或者干脆像笔记本键盘那样用键盘某个区,来输入数字;松开左手之后恢复映射,不影响原先功能。
或者如果不能做成组合键,通过某个开关来作为映射的开启和关闭,这样切换比较麻烦些,不过也可以,就当切换输入法了。
其他的硬件解决方案比如换键盘、增加USB数字小键盘等方案也在考虑当中,不过既然是小众软件的讨论组,就想先了解了解软件方面的解决方案~

我自己用AHK是这样来实现的,但是总感觉哪里不方便或者怪怪的,看看各位大神有没有什么脚本的改进意见或者别的处理方案。

SendMode Input
SetWorkingDir %A_ScriptDir%

!Delete::Send {Numpad1}
!End::Send {Numpad2}
!PgDn::Send {Numpad3}
!Insert::Send {Numpad4}
!Home::Send {Numpad5}
!PgUp::Send {Numpad6}
!PrintScreen::Send {Numpad7}
!ScrollLock::Send {Numpad8}
!Pause::Send {Numpad9}
!Up::Send {Numpad0}
!Left::Send {Numpad0}
!Down::Send {NumpadDot}
!Right::Send {NumpadEnter}

.可以考虑先用一个快捷键赋予变量
比方说caps
当大写状态时Delete直接输入1
这样可以一键输入.

退出时再按下cap就行了.

那我就接着这个思路讲一下,

虽然键盘没有小键盘区,但并不意味着就没有 numlock 状态,于是可以利用这个状态作为变量,用一个相对复杂一点的快捷键去改变这个状态,然后通过识别状态来判定案件所应该产生的反应。

这样会很顺畅,也不容易影响到其他操作

没必要非要用已有的变量
比方说随便直接用快捷键赋予个 i := 1 (同一快捷键开关也很好解决我就不说了)
然后这样就行了。
i := 1前面加上你自己需要的快捷键

i := 1
#If i
Delete::Send {Numpad1}
End::Send {Numpad2}
PgDn::Send {Numpad3}
Insert::Send {Numpad4}
Home::Send {Numpad5}
PgUp::Send {Numpad6}
PrintScreen::Send {Numpad7}
ScrollLock::Send {Numpad8}
Pause::Send {Numpad9}
Up::Send {Numpad0}
Left::Send {Numpad0}
Down::Send {NumpadDot}
Right::Send {NumpadEnter}
#If

那我就来一个没有必要使用变量的

#p::Pause ; 按一次 Win+P 会暂停脚本. 再按一次则取消暂停.

我是脚本多合1的拥趸

如果一个功能就一个文件的话也太复杂了。

比方说就置顶,透明度这些,难道一个功能弄一个文件吗,全部弄一起得了
还有一些热字符串之类的

在这种情况下就需要单独切换一个片段的生效状态了。

那使用一个已有的系统变量,可以更加的语义明确,并且应该还能节省一点内存占用(虽然其实这点优化毫无意义

一样要判断
而且更复杂
因为你需要去设定num lock
然后还得获取这个状态才能判断。并没有直接判断

我说CAPS的原因是AHK有一个直接的功能获取并判断这个状态(暂时找不到相关函数了。。)

Numlock 和 Capslock 一样的

1 Like

的确,刚去翻了一下
都要先 GetKeyState 再判断。
num lock 要比 caps lock影响小一点

推荐一个微软官方键盘映射小工具: PowerToys
微信图片_20210331221621
当然,PowerToys的功能可不止键盘映射,具体详见:

更倾向于快捷键开关,比如双击 CapsLock 开启/关闭 小键盘模式。
如果是组合键的话,不适合输入长串数字。
而且双击不会影响到当前大小写状态。

如果有大量数值录入,最好还是添个外置数字小键盘。

AHK可以像编程语言那样引用多个脚本的函数不?
根据我之前管理代码的经验,理论上代码片段应该功能越单一越少越好,然后再在主脚本里面通过Trigger函数或者主函数来根据情况分别调用不同脚本的不同函数代码段,不过没研究过AHK有没有这种管理功能

我不是程序员。。。
调用脚本可以用
#Include
本质上就是把别人函数复制到自己的脚本中(也可以不复制函数),但是因为没有官方市场,所以得自己去找其他人的函数,然后加进来.

还有
dllcall ComObjCreate
之类的调用第三方程序的就不说了我不会。

我用的84键盘,使用ahk实现小键盘,本来是直接检测numlock的状态,但是有时候换其他全键或者小键盘开启numlock后会忘了关,84键盘又没有numlock指示灯,所以换其他条件开启

^CapsLock::
V_keytonum := !V_keytonum
LockTooltip(V_keytonum ? “模拟NumLock已开启” : “模拟NumLock已关闭”, 500)
Return

LockTooltip(lockmsg,0) {
ToolTip % lockmsg
SetTimer, rmtooltip, -3000
return
rmtooltip:
ToolTip
return
}

#If V_keytonum
0::NumpadDiv ;/
j::Numpad1
k::Numpad2
l::Numpad3
u::Numpad4
i::Numpad5
o::Numpad6
7::Numpad7
8::Numpad8
9::Numpad9
p::NumpadMult ;*
`;::NumpadSub ;-
/::NumpadAdd ;+
m::Numpad0
,::send {Numpad0 2} ;00
h::Backspace
z::NumpadDel
.::NumpadDot
w::NumpadUp
s::NumpadDown
a::NumpadLeft
d::NumpadRight
Enter::NumpadEnter
#If

不错啊,这样构建脚本也清晰合理~

去试试!

左手数字键小键盘工具,主要是方便单手进行操作,以及数字小键盘输入。
①Capslock在中文输入环境中并不常用,所以替换为了Enter键。按住Capslock的情况下,可快捷输出小键盘数字。
②Backspace作为最常用键之一,位置较远手感欠佳,替换了较不常用的Tab键。另外此键还是通用返回上一页功能,相当实用。Tab放在Esc下面,习惯之后其实也还好,没有想象中那么难按。
下载地址:xxyx.ys168.com 工具里面