<Return[MN]><Top>

MapVirtualKey

Declare Function Api_MapVirtualKey& Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode&, ByVal wMapType&)

Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

仮想キーコードをスキャンコード、または文字の値(ASCII 値)へ変換する。また、スキャンコードを仮想コードへ変換することもできる。
指定されたコードの変換に利用したいキーボードレイアウトのハンドルを指定するには、MapVirtualKeyEx 関数を使う。

パラメータ
uCode
    [入力]キーの仮想キーコード、またはスキャンコードを指定する。この値の解釈方法は、uMapType パラメータの値に依存する。
uMapType
    [入力]実行したい変換の種類を指定する。このパラメータの値に基づいて、uCode パラメータの値は次のように解釈される。

 

    値     

意味                                                                               

    0

uCode は仮想キーコードであり、スキャンコードへ変換される。

左右のキーを区別しない仮想キーコードのときは、関数は左側のスキャンコードを返す。

スキャンコードに変換されないときは、関数は 0 を返す。

    1

uCode はスキャンコードであり、仮想キーコードへ変換される。この仮想キーコードは、左右のキーを区別する。

変換されないときは、関数は 0 を返する。

    2

uCode は仮想キーコードであり、戻り値の下位ワードにシフトなしの ASCII 値が格納される。

デッドキー( 分音符号)は、戻り値の上位ビットをセットすることにより明示される。変換されないときは、関数は 0 を返す。

    3

Windows NT/2000:uCode はスキャンコードであり、左右のキーを区別する仮想キーコードへ変換される。

変換されないときは、関数は 0 を返す。


戻り値
    uCode パラメータと uMapType パラメータの値に従って、スキャンコード、仮想キーコード、ASCII 値のいずれかが返る。

    変換されないときは、0 が返る。

解説
    アプリケーションは MapVirtualKey 関数を使って、スキャンコードを VK_SHIFT、VK_CONTROL、VK_MENU などの仮想キーコード定

    数へ変換できる。また、その逆の変換も行える。これらの変換では、左右の Shift、Ctrl、Alt の各キーを区別しない。
    Windows NT/2000:アプリケーションは uCode で次の仮想キーコード定数のいずれかをセットして MapVietualKey 関数を呼び出すと、左

    右の Shift、Ctrl、Alt の各キーに対応したスキャンコードを取得できる。
    VK_LSHIFT
    VK_RSHIFT
    VK_LCONTROL
    VK_RCONTROL
    VK_LMENU
    VK_RMENU
    左右を区別するこれらの定数は、GetKeyboardState、SetKeyboardState、GetAsyncKeyState、GetKeyState、MapVirtualKey の各

    関数に限って利用できる。
    デッドキーの名前はそのとおり( たとえば「'」)に出力される。( 英語以外の言語ではアクセントやウムラウトなどの文字飾りを使うこと

    がある。たとえば、最初に「'」、次に「a」を押すと、アクサンテギュ付きの a を入力できるキーボードと OS がある。

    このような場合、「'」をデッドキーと呼ぶ。)