概要
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 ID
127190(最終更新日 1999-03-19) をもとに作成したものです。