とりわけ、別の操作のステータスをチェックする小さなコンソール アプリケーションがあります。1 秒に 1 回、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 キーを押すことをシミュレートすることで機能するため、スクリーンセーバーが起動することはありません。ただし、Windows と同様に、コンソール アプリも F15 のシミュレートされたプレスを実際のキープレスとして読み取り、コンソール アプリを終了させます。F15 と照合できれば、除外できます。だから、私の質問:
Term::ReadKey を使用して、F15 が押されたかどうかを判断するにはどうすればよいですか?
これは、Windows 7 Pro、Strawberry 5.12.3、Term::ReadKey v. 2.30.02 にあります。
(私の質問には重要なxy 問題コンポーネントがある可能性があることを認識しており、他の解決策を歓迎します。ただし、これを行う方法に興味があります。ファンクション キーがいつ変更されたかを確認したい理由がわかります。他の状況では押されます。)