共用方式為


WM_CHAR訊息

TranslateMessage函式翻譯WM_KEYDOWN訊息時,張貼至具有鍵盤焦點的視窗。 WM_CHAR訊息包含按下的按鍵字元碼。

#define WM_CHAR                         0x0102

參數

wParam

機碼的字元碼。

lParam

重複計數、掃描程式碼、擴充索引鍵旗標、內容程式碼、先前的索引鍵狀態旗標和轉換狀態旗標,如下表所示。

Bits 意義
0-15 目前訊息的重複計數。 值是按鍵自動回復的次數,因為使用者按住按鍵。 如果按鍵保留夠長,則會傳送多個訊息。 不過,重複計數不是累計的。
16-23 掃描碼。 此值取決於 OEM。
24 指出按鍵是否為擴充按鍵,例如出現在增強型 101 或 102 鍵鍵盤上的右鍵 ALT 和 CTRL 鍵。 如果它是擴充索引鍵,則值為 1;否則為 0。
25-28 保留;請勿使用。
29 內容程式碼。 如果按下按鍵時按住 ALT 鍵,則值為 1;否則,值為 0。
30 上一個索引鍵狀態。 如果索引鍵在傳送訊息之前關閉,則值為 1,如果索引鍵已啟動,則為 0。
31 轉換狀態。 如果放開按鍵,則值為 1,如果按下按鍵則為 0。

如需詳細資訊,請參閱 擊鍵訊息旗標

傳回值

如果應用程式處理此訊息,應用程式應該會傳回零。

範例

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
   
    // ...

    case WM_CHAR:
        OnKeyPress(wParam);
        break;

    default:
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}

GitHub 上的 Windows 傳統範例 範例範例。

備註

如果使用RegisterClass函式的 Unicode 版本註冊視窗類別,WM_CHAR訊息會使用 UTF-16 (16 位 Unicode 轉換格式) 程式碼單位。 否則,系統會在目前的進程字碼頁中提供字元,其可在 Windows 版本 1903 (2019 年 5 月更新) 和更新版本中設定為 UTF-8。 如需詳細資訊,請參閱在 Windows 應用程式中 註冊視窗類別 和使用 UTF-8 字碼頁

從 Windows Vista 開始, WM_CHAR 訊息可以將 UTF-16 Surrogate 配對 傳送至 Unicode 視窗。 視需要使用 IS_HIGH_SURROGATEIS_LOW_SURROGATEIS_SURROGATE_PAIR 宏來偵測這類情況。

按下的按鍵與產生的字元訊息之間不一定有一對一的對應,因此 lParam 參數高序單字中的資訊通常不適用於應用程式。 高序字中的資訊僅適用于張貼WM_CHAR訊息之前的最新WM_KEYDOWN訊息。

針對增強的 101 和 102 鍵鍵盤,擴充鍵是鍵盤主要區段的右 ALT 和右 CTRL 鍵;數位鍵板左邊的 INS、DEL、HOME、END、PAGE UP、PAGE DOWN 和方向鍵;和 數位鍵板中的除 (/) 和 ENTER 鍵。 有些其他鍵盤可能支援 lParam 參數中的擴充按鍵位。

WM_UNICHAR訊息與WM_CHAR相同,但會使用 UTF-32。 其設計目的是將 Unicode 字元傳送或張貼至 ANSI 視窗,而且可以處理 Unicode 增補平面字元。

規格需求

需求
最低支援的用戶端
Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器
Windows 2000 Server [僅限傳統型應用程式]
標頭
Winuser.h (包含 Windows.h)

另請參閱