以前キーボードの 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 さん) の意向に 合わせます.