我有一个小控制台应用程序,其中包括检查另一个操作的状态。它使用 Term::ReadKey 每秒钟检查一次按键。如果按下 'r' 键,它会刷新显示:
{ # generate display ...
print "Press 'r' to refresh, any other key to exit: ";
my $resp = readkey();
print $resp;
redo if $resp =~ /r/i;
}
exit;
sub readkey {
my $key;
ReadMode('cbreak');
while (not defined $key) {
if (defined ($key = ReadKey(-1)) ) {
exit if $key =~ /\cC/i; # allow Ctrl-C to behave normally
return $key;
} else {
sleep 1;
}
}
ReadMode('normal');
}
这一切都完全按预期工作。但是,我也使用咖啡因来防止我的 Win 7 显示器进入睡眠状态。该实用程序通过每 59 秒模拟一次 F15 来工作,因此永远不会启动屏幕保护程序。尽管 Caffeine 的方法非常笨拙,但多年来对我来说效果很好。但是,与 Windows 一样,我的控制台应用程序也会将 F15 的模拟按下读取为真正的按键,从而导致控制台应用程序退出。如果我可以匹配 F15,我可以将其过滤掉。所以,我的问题:
如何使用 Term::ReadKey 确定是否按下了 F15?
这是在 Windows 7 Pro、Strawberry 5.12.3、Term::ReadKey v. 2.30.02 上。
(我知道我的问题可能有一个重要的xy 问题组成部分,我欢迎其他解决方案。但是,我很好奇如何做到这一点。我可以明白为什么我可能想看看功能键何时在其他情况下按下。)