私が開発しているゲームでは、押されたときに「コールバック」関数を登録するなど、キープレス (または keyup )NUMLOCK
を検出したいと考えています。
特定の瞬間にその状態を読み取るように求めているわけではありません。すでにそれを行うことができますし、その値を変更することにも興味がありません。これは、キーが押されたときにそれを認識しているため、10 分の 1 秒ごとにその状態をポーリングする必要がありません。
ゲームは を使用してcurses
おり、現在はブロッキングgetch()
. Curses はNUMLOCK
キー押下を検出しません。私はそれを期待していませんでした (LED 関連のキーボードはキーを「生成」しません)。メインの curses ループをブロックgetch()
せず、関数を呼び出してkeyboard_leds()
現在の状態を読み取ります。
例: curses を初期化した後に新しいスレッドを開始し、その画面を引数として渡すと、そのスレッドはキー押下のイベントのstdscr
コールバック関数 (たとえば ) を登録します。したがって、その関数は必要なときにのみ呼び出され、その後更新されます。special_keypress()
NUMLOCK
keyboard_leds()
stdscr
これが可能かどうかはわかりません。また、おそらくアーキテクチャに依存するもの (カーネル/X11 など) に移行する必要があることもわかっているため、クロスプラットフォーム ソリューションが不可能な場合は、 Linuxのみのもので大丈夫です。