使用Perl脚本模仿按键盘F键

时间:2015-01-25 18:05:02

标签: windows perl keystroke

有没有办法可以模仿从Windows 7上的Perl脚本按下功能键(F1-F12)?

我有一个程序,需要按下F7才能停止它。

我试图杀死程序进程,但这并没有彻底停止这个过程。

1 个答案:

答案 0 :(得分:2)

如果您使用的是Windows,Win32::GuiTest可以执行您想要的操作。他们several examples使用SendKeys按功能键。

在Unix上,情况既简单又困难。功能键通常映射在终端中以发送多个字符。您可以找到他们使用ord和sprintf获取其十六进制值(更容易使用)的内容。这是一个“kj”的例子,作为一个简单的例子,然后是F1到F7。

$ perl -wle 'while(<>) { chomp; print join ", ", map { sprintf "%x", ord } split //, $_ }'
kj
6b, 6a
^[OP
1b, 4f, 50
^[OQ
1b, 4f, 51
^[OR
1b, 4f, 52
^[OS
1b, 4f, 53
^[[15~
1b, 5b, 31, 35, 7e
^[[17~
1b, 5b, 31, 37, 7e
^[[18~
1b, 5b, 31, 38, 7e
^[[19~
1b, 5b, 31, 39, 7e

ASCII 1b是转义字符(在终端上由^[表示)。 5b是[,依此类推。因此,您可以将这些字符串打印到程序的输入或tty。例如,F8将是“\ x {1b} [19~”。

为什么F1-F4与众不同?基于此的VT100 terminal只有四个功能键。后来的VT220增加了其余部分。

可能有一个模块可以帮你解决这个问题,但我找不到它。