キーボードの情報を取得する方法【Windows API】

キーボードの各種情報を取得するときは「GetKeyboardType」関数を利用することでキーボードの各種情報を取得することができます。 関数に与える引数によって取得できる情報が異なるので注意して使用する必要があります。 基本的なデータのパターンについて以下に列挙します。

int main(int argc, char* argv[])
{
    int nType;

    printf("キーボードの種類 : ");
    nType = GetKeyboardType(0);

    switch (nType)
    {
    case 1: printf("IBM PC/XT または互換キーボード(83 キー)\n"); break;
    case 2: printf("Olivetti ICO キーボード(102 キー) \n"); break;
    case 3: printf("IBM PC/AT または類似のキーボード(84 キー)\n"); break;
    case 4: printf("IBM 拡張キーボード(101 キー、または 102 キー)\n"); break;
    case 5: printf("Nokia 1050 または類似のキーボード\n"); break;
    case 6: printf("Nokia 9140 または類似のキーボード\n"); break;
    case 7: printf("日本語キーボード\n"); break;
    default:printf("不明なキーボード [%d]\n", nType);
    }

    printf("OEM : ");
    nType = GetKeyboardType(1);

    switch (nType)
    {
    case 0x00: printf("101キーボード(DOS/V)\n"); break;
    case 0x01: printf("AX\n"); break;
    case 0x02: printf("106キーボード\n"); break;
    case 0x04: printf("EPSON\n"); break;
    case 0x05: printf("富士通\n"); break;
    case 0x07: printf("日本IBM\n"); break;
    case 0x0A: printf("松下電器\n"); break;
    case 0x0D: printf("日本電気\n"); break;
    case 0x12: printf("TOSHIBA\n"); break;
    default:printf("不明 [%d]\n", nType);
    }

    printf("ファンクションキーの数 : ");
    nType = GetKeyboardType(2);

    switch (nType)
    {
    case 1: printf("10\n"); break;
    case 2: printf("12 or 18\n"); break;
    case 3: printf("10\n"); break;
    case 4: printf("12\n"); break;
    case 5: printf("10\n"); break;
    case 6: printf("24\n"); break;
    default:printf("%d\n", nType);
    }

    return 0;
}

まとめ

この記事を書いたときは日本電気とか富士通も自社でパソコンを生産していましたね。今はどちらもLenovoなので、どんな風に動作するのか興味がありますね。

Windows API

Posted by @erestage