有没有办法可以模仿从Windows 7上的Perl脚本按下功能键(F1-F12)?
我有一个程序,需要按下F7才能停止它。
我试图杀死程序进程,但这并没有彻底停止这个过程。
答案 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增加了其余部分。
可能有一个模块可以帮你解决这个问题,但我找不到它。