以前キーボードの LED 制御について調査し, それに基づいて メール着信検出プログラムを作り, 以来愛用していました. ところが先日, 仕事で使う PC を新調したところ PS/2 ポートがありません. USB です. 残念ながら従来の方法は USB キーボードには使えませんので, なんとかならないか新たに調査を開始しました.
その結果 こちら の方にそのままずばりの回答がありました. すばらしい. というわけで, ちょっとモディファイして ライブラリ化してみました.
使い方は
#include <stdio.h> #include "keyLED.h" int main(){ keyboardLED key; if (key.OpenDevice()){ // キーボードデバイスを開く int m=key.GetToggleStatus(); // 現在のトグル状態を記憶 for (int i=0;i < 5;i++){ m |= 1; // Scroll LED を点灯 key.TurnDevice(m); Sleep(500); m &= ~1; // LED を消す key.TurnDevice(m); Sleep(500); } key.TurnDevice(key.GetToggleStatus()); // 点滅状態を戻す key.CloseDevice(); // デバイスを閉じる } return 0; } |
なお, 管理対象は OpenDevice() を実行した時点でつながっていたキーボードすべてです. 複数キーボードをつけてその中の一つのみ制御したいとか, OpenDevice() 後に接続されたキーボードも管理したいという場合は, 適当にソースを書き換えてください. また環境によっては FILE_DEVICE_KEYBOARD とか METHOD_BUFFERED, FILE_ANY_ACCESS 等が定義されてないとか, CTL_CODE がうんたらかんたらと文句 (C2065, C3861) を言うときがあるかもしれません. その際は winioctl.h を適当なところ (sadafx.h とか) で include させればいいはずです.
最後に本ライブラリの取り扱いですがコード自体は上述ページ ほとんどそのままですのでその扱いはその作者 (Gao さん) の意向に 合わせます.