首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 調用 WinAPI:GetKeyNameText 取得鍵盤按鍵顯示名稱

     編輯:Delphi

將虛擬鍵碼轉為使用者可讀的按鍵名稱

GetKeyNameText 依據 WM_KEYDOWN 訊息的 KeyData (包含虛擬鍵碼、掃描碼、擴充鍵旗標等),取得當地語系的按鍵名稱 (如「A」、「Shift」、「F1」、「Home」)。本範例攔截表單 WM_KEYDOWN,即時於畫面中央大字顯示按鍵名稱。

函數宣告


function GetKeyNameText(lParam: Longint; lpString: PChar; nSize: Integer): Integer; stdcall;

完整程式碼


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure MyMsg(var msg: TWMKeyDown); message WM_KEYDOWN;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Canvas.Font.Size := 24;
  Canvas.Font.Style := [fsBold];
  Canvas.Font.Color := clRed;
  Canvas.Brush.Color := clWhite;
end;

procedure TForm1.MyMsg(var msg: TWMKeyDown);
var
  buf: array[0..31] of Char;
  rect: TRect;
  str: string;
begin
  GetKeyNameText(msg.KeyData, buf, Length(buf));
  str := buf;
  rect := ClientRect;
  Canvas.FillRect(rect);
  Canvas.TextRect(rect, str, [tfSingleLine, tfCenter, tfVerticalCenter]);
  inherited;
end;

end.

執行效果圖

應用場景

  • 熱鍵設定對話框:顯示使用者按下的組合鍵
  • 鍵盤教學軟體:即時回饋按鍵名稱
  • 遊戲按鍵配置介面

注意:KeyData 包含完整的 lParam 資訊,能正確區分左右 Shift/Ctrl/Alt、數字鍵盤鍵等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved