J'ai une petite application de console qui vérifie entre autres le statut d'une autre opération. Une fois par seconde, il vérifie les touches en utilisant Term :: ReadKey. Si la touche 'r' a été pressée, l'affichage est actualisé:Comment puis-je déterminer si F15 a été pressé?
{ # 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');
}
Ceci fonctionne comme prévu. Cependant, j'utilise également Caffeine pour empêcher l'affichage de mon écran Win 7. Cet utilitaire fonctionne en simulant une pression de F15 toutes les 59 secondes, ne permettant donc jamais à l'économiseur d'entrer en jeu. Bien que l'approche de Caffeine soit assez kludgy, cela a très bien fonctionné pour moi pendant des années. Cependant, à l'instar de Windows, mon application de console lit également la pression simulée de F15 comme une véritable pression sur la touche, provoquant la sortie de l'application de la console. Si je pouvais égaler F15, je pourrais le filtrer. Donc, ma question:
Comment puis-je déterminer si F15 a été pressé, en utilisant Term :: ReadKey?
Ceci est sur Windows 7 Pro, Strawberry 5.12.3, Term :: ReadKey v. 2.30.02.
(Je suis conscient qu'il peut y avoir un composant significatif à ma question, et je me réjouis d'autres solutions.) Cependant, je suis curieux de savoir comment on pourrait faire cela. Je peux voir pourquoi je pourrais vouloir voir quand une fonction touche a été appuyée dans d'autres situations.)
Merci @ikegami, qui servira admirablement. [Aussi, merci d'avoir répondu à la question posée malgré sa nature x-y :)] – Twixi