ToAscii 関数 (winuser.h)

指定した仮想キー コードとキーボードの状態を、対応する 1 つまたは複数の文字に変換します。 この関数は、キーボード レイアウト ハンドルによって識別される入力言語と物理キーボード レイアウトを使用してコードを変換します。

指定したコードの変換に使用するキーボード レイアウトのハンドルを指定するには、ToAsciiEx 関数を使用します。

Note

このメソッドは、1 回のキー押しで複数の文字 (合字など) や補助 Unicode 文字を生成する一部の キーボード レイアウト では正しく動作しない場合があります。 このようなケースを適切に処理する ToUnicode メソッドまたは ToUnicodeEx メソッドを使用することを強くお勧めします。

構文

int ToAscii(
  [in]           UINT       uVirtKey,
  [in]           UINT       uScanCode,
  [in, optional] const BYTE *lpKeyState,
  [out]          LPWORD     lpChar,
  [in]           UINT       uFlags
);

パラメーター

[in] uVirtKey

型: UINT

変換する仮想キー コード。 「仮想キー コード」を参照してください。

[in] uScanCode

型: UINT

変換するキーのハードウェア スキャン コード。 キーがアップしている (押されていない) 場合、この値の上位ビットが設定されます。

[in, optional] lpKeyState

型: const BYTE*

現在のキーボードの状態を含む 256 バイト配列へのポインター。 配列内の各要素 (バイト) には、1 つのキーの状態が含まれます。 バイトの上位ビットが設定されている場合、キーはダウン (押されます) されます。

低ビット (設定されている場合) は、キーがオンになっていることを示します。 この関数では、CAPS LOCK キーのトグル ビットのみが関連します。 NUM LOCK キーと SCROLL LOCK キーの切り替え状態は無視されます。

[out] lpChar

型: LPWORD

翻訳された文字を受け取るバッファーへのポインター (または 2 つの文字が 1 つの WORD 値にパックされます。下位バイトには最初の文字が含まれており、上位バイトには 2 番目の文字が含まれます)。

[in] uFlags

型: UINT

メニューがアクティブな場合は 1、それ以外の場合は 0 である必要があります。

戻り値

型: int

戻り値は、次のいずれかの値です。

戻り値 説明
0
指定された仮想キーには、キーボードの現在の状態に対する変換がありません。
1
1 文字がバッファーにコピーされました。
2
バッファーに 2 文字がコピーされました。 これは通常、キーボード レイアウトに格納されているデッドキー文字 (アクセントまたは分音記号) を、指定された仮想キーで構成して 1 つの文字を形成できない場合に発生します。

解説

ToAscii 関数に指定されたパラメーターは、以前のデッド キーがキーボード レイアウトに格納されているため、仮想キー コードを変換するのに十分でない場合があります。

通常、 ToAscii は仮想キー コードに基づいて変換を実行します。 ただし、場合によっては、 uScanCode パラメーターのビット 15 を使用して、キー押しとキー解放を区別できます。 スキャン コードは、Alt + 数値キー の組み合わせを変換するために使用されます。

NUM LOCK はキーボードの動作に影響を与えるトグル キーですが、uVirtKey パラメーターだけでカーソル移動キー (VK_HOME、VK_INSERT など) と数値キー (VK_DECIMALVK_NUMPAD0 VK_NUMPAD9) を区別するのに十分であるため、 - ToAsciilpKeyState (VK_NUMLOCK) のトグル設定 (低ビット) を無視します。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winuser.h (Windows.h を含む)
Library User32.lib
[DLL] User32.dll

関連項目

概念

キーボード入力

OemKeyScan

参照

ToAsciiEx

ToUnicode

VkKeyScan