一个桌面虚拟数字小键盘

因为http://appinn.me/d/580/ 里面, @qq88178813 找不到, 我晚上没事随手写了一个.

用ahk写的,难度倒是不大,不过在输出时用了好几种方案, 最后感觉还是背景发送(ControlSend)的方式感观最好.

所以耽误了不少时间.

下载地址:http://pan.baidu.com/s/1qW4XaAo

因为是AHK写的, 所以个别杀毒软件会有报警提示. 担心的话勿下.

; ver1.1 2014.10.23 增加()按钮功能.
; ver1.2 修正个别输出字符在unicdoe和ansi之间混乱显示的情况. 比如*输出为8,(输出为9

高大上啊

能不能加入()方便输入计算式,还有就是为什么我不能输入,一点键盘就成了当前窗口了,没有办法输入到excel里面去。

@qq88178813

界面上有一句提示:在激活窗口按Win+K获取焦点。不知道有没有帮助…

@qq88178813 新版本增加了()

不过我发现一个AHK自身的bug. 导致快速重复点击时, 个别按钮的输出会混乱. 我调试了很久, 发现不是代码的问题. 而是AHK本身的问题. 但是原因还不得而知. 所以暂时不会放出新版本了.

@小恐龙 那个一点键盘就成了当前窗口了,没有办法输入到excel里面去。这个问题是不是我哪里不会操作?

@qq88178813 代码采用了ControlSend, 会在背景对指定焦点的窗体输出字符. 但是经我测试, 部分按钮会输出混乱.

但是采用切换焦点的输出对用户的观感不好.正在寻求解决中…

@qq88178813 已更新,现在可以了.已经解决了.

@小恐龙 非常完美。

已分享:http://www.appinn.com/numpad-win/

其實Windows自帶的屏幕鍵盤就有 當然這個更簡單一點

挖坟
小恐龙还有保留源码吗 :joy:
现在Win+K是显示器和蓝牙音频,想更换一下激活的快捷键

没有保留了.

不过这个是ahk编译的, 你反编译一下试试.

幸好我的百度网盘里还有exe程序, 我下载回来后, 反编译了一下. 代码你自己改.

Menu, Tray, Icon, Shell32.dll, 174
Gui, Add, Button, x132 y130 w40 h80 , Enter
Gui, Add, Text,x12 y255 w165 h40, 在激活窗口按 Win+K 获取焦点
Gui, Font, s14, Arial
Gui, Add, Button, x12 y10 w40 h40 , =
Gui, Add, Button, x52 y10 w40 h40 , /
Gui, Add, Button, x92 y10 w40 h40 , *
Gui, Add, Button, x132 y10 w40 h40 , -
Gui, Add, Button, x12 y50 w40 h40 , 7
Gui, Add, Button, x52 y50 w40 h40 , 8
Gui, Add, Button, x92 y50 w40 h40 , 9
Gui, Add, Button, x12 y90 w40 h40 , 4
Gui, Add, Button, x52 y90 w40 h40 , 5
Gui, Add, Button, x92 y90 w40 h40 , 6
Gui, Add, Button, x12 y130 w40 h40 , 1
Gui, Add, Button, x52 y130 w40 h40 , 2
Gui, Add, Button, x92 y130 w40 h40 , 3
Gui, Add, Button, x92 y170 w40 h40 , .
Gui, Add, Button, x132 y50 w40 h80 , +
Gui, Add, Button, x12 y170 w80 h40 , 0
Gui, Add, Button, x12 y210 w80 h40 , (
Gui, Add, Button, x92 y210 w80 h40 , )
id := WinExist("A")
Gui, Show,NoActivate x606 y300 h280 w185, NumPad
Gui, +AlwaysOnTop
return
IfWinNotActive,Numpad
id := WinExist("A")
trayTip NumPad by 小恐龙, 获取输入焦点%id%
return
SetKeyDelay, -1, 0
ButtonEnter:
ControlSend ,,{Enter},ahk_id %id%
return
Button=:
ControlSend ,,=,ahk_id %id%
return
Button/:
ControlSend ,,/,ahk_id %id%
return
button*:
ControlSend ,,{U+002a},ahk_id %id%
return
button+:
ControlSend ,,{U+002b},ahk_id %id%
return
button-:
ControlSend ,,-,ahk_id %id%
return
button1:
ControlSend ,,1,ahk_id %id%
return
button2:
ControlSend ,,2,ahk_id %id%
return
button3:
ControlSend ,,3,ahk_id %id%
return
button4:
ControlSend ,,4,ahk_id %id%
return
button5:
ControlSend ,,5,ahk_id %id%
return
button6:
ControlSend ,,6,ahk_id %id%
return
button7:
ControlSend ,,7,ahk_id %id%
return
button8:
ControlSend ,,8,ahk_id %id%
return
button9:
ControlSend ,,9,ahk_id %id%
return
button0:
ControlSend ,,0,ahk_id %id%
return
button.:
ControlSend ,,.,ahk_id %id%
return
Button(:
ControlSend ,,{U+0028},ahk_id %id%
return
Button):
ControlSend ,,{U+0029},ahk_id %id%
return
#K::
id := WinExist("A")
Gui, Show,NoActivate
trayTip,NumPad by 小恐龙, 获取输入焦点%id%
return
GuiClose:
trayTip,NumPad by 小恐龙, 快捷键Win+K显示小键盘
Gui, Cancel
return
1 Like

感谢感谢!

我把快捷键改成了 右Ctrl+0,UI放大到150%便于触屏操作。。。

Menu, Tray, Icon, Shell32.dll, 174
Gui, Font, s12, Courier New Bold
Gui, Add, Button, x18 y15 w60 h60, =
Gui, Add, Button, x78 y15 w60 h60, /
Gui, Add, Button, x138 y15 w60 h60, *
Gui, Add, Button, x198 y15 w60 h60, -
Gui, Add, Button, x18 y75 w60 h60, 7
Gui, Add, Button, x78 y75 w60 h60, 8
Gui, Add, Button, x138 y75 w60 h60, 9
Gui, Add, Button, x198 y75 w60 h120, +
Gui, Add, Button, x18 y135 w60 h60, 4
Gui, Add, Button, x78 y135 w60 h60, 5
Gui, Add, Button, x138 y135 w60 h60, 6
Gui, Add, Button, x18 y195 w60 h60, 1
Gui, Add, Button, x78 y195 w60 h60, 2
Gui, Add, Button, x138 y195 w60 h60, 3
Gui, Add, Button, x198 y195 w60 h120 , Enter
Gui, Add, Button, x138 y255 w60 h60, .
Gui, Add, Button, x18 y255 w120 h60, 0
Gui, Add, Button, x18 y315 w60 h60, (
Gui, Add, Button, x78 y315 w60 h60, )
Gui, Add, Button, x138 y315 w60 h60, ⇧Tab
Gui, Add, Button, x198 y315 w60 h60, Tab
Gui, Add, Text,x18 y385 w248 h60, 在激活窗口按 RCtrl+0 获取焦点
id := WinExist("A")
Gui, Show,NoActivate x1600 y500 h430 w276, NumPad
Gui, +AlwaysOnTop
return
IfWinNotActive,Numpad
id := WinExist("A")
trayTip NumPad by 小恐龙, 获取输入焦点%id%
return
SetKeyDelay, -1, 0
Button⇧Tab:
ControlSend ,,+{Tab},ahk_id %id%
return
ButtonTab:
ControlSend ,,{Tab},ahk_id %id%
return
ButtonEnter:
ControlSend ,,{Enter},ahk_id %id%
return
Button=:
ControlSend ,,=,ahk_id %id%
return
Button/:
ControlSend ,,/,ahk_id %id%
return
button*:
ControlSend ,,{U+002a},ahk_id %id%
return
button+:
ControlSend ,,{U+002b},ahk_id %id%
return
button-:
ControlSend ,,-,ahk_id %id%
return
button1:
ControlSend ,,1,ahk_id %id%
return
button2:
ControlSend ,,2,ahk_id %id%
return
button3:
ControlSend ,,3,ahk_id %id%
return
button4:
ControlSend ,,4,ahk_id %id%
return
button5:
ControlSend ,,5,ahk_id %id%
return
button6:
ControlSend ,,6,ahk_id %id%
return
button7:
ControlSend ,,7,ahk_id %id%
return
button8:
ControlSend ,,8,ahk_id %id%
return
button9:
ControlSend ,,9,ahk_id %id%
return
button0:
ControlSend ,,0,ahk_id %id%
return
button.:
ControlSend ,,.,ahk_id %id%
return
Button(:
ControlSend ,,{U+0028},ahk_id %id%
return
Button):
ControlSend ,,{U+0029},ahk_id %id%
return
>^0::
id := WinExist("A")
Gui, Show,NoActivate
trayTip,NumPad by 小恐龙, 获取输入焦点%id%
return
GuiClose:
trayTip,NumPad by 小恐龙, 快捷键RCtrl+0显示小键盘
Gui, Cancel
return

然后发现ControlSend操作在现在好多界面丰富的软件中都聚焦不到正确的控件了。。。只能在记事本和Excel用一用 :joy:

再后来发现原来市面上有单独卖的只带数字区的硬件小键盘,只要三五十块钱,把NumLock关了还能用Insert Delete Home End PageUp PageDown :joy:

我买键盘必须全尺寸的. 没有小键盘区受不了. :rofl:

没办法,surface没有空间放小键盘区了。

其实如果windows自带的触摸键盘能隐藏字母区,就正好可以同时用物理键盘输字母+触屏输数字了。。。但不知道是不是微软没有想到这个feature