[CoveredCalc] キーコードからキー名称取得

ここんとこほとんど開発がすすんでいませんが、とりあえずキーコードからのキー名称取得の調査段階にいます。
Windows 版の場合は次のようにしてやればいいかなーと考えています。
DWORD virtKey; // ここに仮想キーコードが入っている
TCHAR buf[128];
UINT scanCode = MapVirtualKey(virtKey, MAPVK_VK_TO_VSC);
if (0 != scanCode)
{
    if (0 != GetKeyNameText(scanCode << 16, buf, sizeof(buf)))
    {
        // キー名が取得できた。buf が文字列。
        return;
    }
}

// それでもとれなければキーコードをそのまま表示することにする
// virtKey を "keycode-2f" みたいに
sprintf(buf, "keycode-%02x", virtKey);


BeOS 版の方は問題で、たぶん、キーコードからキー名称を取得するような API はないですね。
キーマッピングでマップされた文字をとったりすると小文字ばっかりとれてしまいそうだし、ファンクションキーとかテンキーとかは思ったようにとれないし。
ということで BeOS 版の方はキーコードとキー名称の対応表みたいなのを XML ファイルで持っておこうかなとか思ってます。これなら楽ちん。

Windows 版の方も同じ XML ファイルを持っておいてもいいですね。特に定義は追加しないで。デフォルトの表記じゃ区別できないキーボードとかそういうのを使ってる人がカスタマイズする最後の手段を残しておくという意味しかありませんが。

ということでまとめると

1. ソフトに添付した XML ファイルに定義があればそのキー名称を使う。
2. (Windowsの場合のみ) GetKeyNameText() API を使ってキー名称を取得。
3. それでもダメなら "keycode-xx"。
[PR]
by hironytic | 2008-01-29 23:30 | 構想
<< [CoveredCalc] キ... [PonpokoDiff] ベ... >>