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
戻り値は、次のいずれかの値です。
戻り値 | 説明 |
---|---|
|
指定された仮想キーには、キーボードの現在の状態に対する変換がありません。 |
|
1 文字がバッファーにコピーされました。 |
|
バッファーに 2 文字がコピーされました。 これは通常、キーボード レイアウトに格納されているデッドキー文字 (アクセントまたは分音記号) を、指定された仮想キーで構成して 1 つの文字を形成できない場合に発生します。 |
解説
ToAscii 関数に指定されたパラメーターは、以前のデッド キーがキーボード レイアウトに格納されているため、仮想キー コードを変換するのに十分でない場合があります。
通常、 ToAscii は仮想キー コードに基づいて変換を実行します。 ただし、場合によっては、 uScanCode パラメーターのビット 15 を使用して、キー押しとキー解放を区別できます。 スキャン コードは、Alt + 数値キー の組み合わせを変換するために使用されます。
NUM LOCK はキーボードの動作に影響を与えるトグル キーですが、uVirtKey パラメーターだけでカーソル移動キー (VK_HOME、VK_INSERT など) と数値キー (VK_DECIMAL、VK_NUMPAD0 VK_NUMPAD9) を区別するのに十分であるため、 - ToAscii は lpKeyState (VK_NUMLOCK) のトグル設定 (低ビット) を無視します。
要件
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winuser.h (Windows.h を含む) |
Library | User32.lib |
[DLL] | User32.dll |
関連項目
概念
参照