ToAscii 函式 (winuser.h)

將指定的虛擬按鍵程式碼和鍵盤狀態轉譯為對應的字元或字元。 函式會使用鍵盤配置控制碼所識別的輸入語言和實體鍵盤配置來翻譯程式碼。

若要指定用來翻譯指定程式碼的鍵盤配置控制碼,請使用 ToAsciiEx 函式。

注意

這個方法可能無法與某些可能會產生多個字元 (的 鍵盤版面配置 正常運作,也就是單鍵按下時,) 和/或增補 Unicode 字元。 強烈建議使用可正確處理這類案例的 ToUnicodeToUnicodeEx 方法。

語法

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 位元組陣列指標。 陣列中的每個元素 (位元組) 包含一個索引鍵的狀態。 如果已設定位元組的高序位,按鍵會關閉 (按下) 。

如果設定,則為低位,表示金鑰已開啟。 在此函式中,只有 CAPS LOCK 鍵的切換位是相關的。 忽略 NUM LOCK 和 SCROLL LOCK 鍵的切換狀態。

[out] lpChar

類型: LPWORD

緩衝區的指標,該緩衝區會接收轉譯字元 (或兩個字元封裝成單一 WORD 值,其中低序位元組包含第一個字元,而高序位元組則包含第二個字元) 。

[in] uFlags

類型: UINT

如果功能表為使用中,則此參數必須為 1,否則為 0。

傳回值

類型: int

傳回值是下列其中一個值。

傳回值 描述
0
指定的虛擬按鍵沒有鍵盤目前狀態的轉譯。
1
一個字元已複製到緩衝區。
2
已將兩個字元複製到緩衝區。 這通常發生在鍵盤配置中儲存的死鍵字元 (輔色或讀音符號) 無法由指定的虛擬按鍵組成,以形成單一字元。

備註

提供給 ToAscii 函式的參數可能不足以轉譯虛擬按鍵程式碼,因為先前的死鍵會儲存在鍵盤配置中。

一般而言, ToAscii 會根據虛擬金鑰程式碼執行翻譯。 不過,在某些情況下, uScanCode 參數的位 15 可用來區分按鍵按下和按鍵釋放。 掃描程式碼用於翻譯 ALT+ 數位按鍵 組合。

雖然 NUM LOCK 是會影響鍵盤行為的切換鍵,但 ToAscii會忽略lpKeyState ( (VK_NUMLOCK) 的) 切換 (設定,因為uVirtKey參數本身就足以區分游標移動鍵 (VK_HOMEVK_INSERT) 等等 (VK_DECIMAL, - VK_NUMPAD0VK_NUMPAD9) 。

規格需求

   
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 winuser.h (包括 Windows.h)
程式庫 User32.lib
Dll User32.dll

另請參閱

概念

鍵盤輸入

OemKeyScan

參考

ToAsciiEx

ToUnicode

VkKeyScan