概要
SetKeyboardState() のドキュメントは、正しく言うと、この API を使って NUM LOCK、CAPS LOCK、SCROLL LOCK キーのトグル操作はできません。
Windows NT では、keybd_event() を使って、NUM LOCK、CAPS LOCK、SCROLL LOCK キーのトグル操作を行えます。同じ手法で、Windows 95 で CAPS LOCK と SCROLL LOCK キーのトグル操作を行えますが、NUM LOCK に対しては使えません。詳細
以下のサンプル プログラムは、NUM LOCK のライトを点灯、消灯します。ここに定義されている SetNumLock 関数は、VK_NUMLOCK の仮想キーで、keybd_event() を使って、NUM LOCK キーの押下をシミュレートします。ライトが点灯 (TRUE) されているか消灯 (FALSE) されているかは真偽値で示します。
同じ手法で、CAPS LOCK キー (VK_CAPITAL) と SCROLL LOCK キー (VK_SCROLL) が使えます。サンプルコード
/* コンパイル オプションが必要
*/ #include <windows.h> void SetNumLock( BOOL bState ) { BYTE keyState[256]; GetKeyboardState((LPBYTE)&keyState); if( (bState && !(keyState[VK_NUMLOCK] & 1)) || (!bState && (keyState[VK_NUMLOCK] & 1)) ) { // キーの押下を行う keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 ); // キーを離す keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } } void main() { SetNumLock( TRUE ); }
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID127190(最終更新日 1999-03-19) をもとに作成したものです。