ShortCutToText , TextToShortCut 需 uses Menus;
type TForm1 = class(TForm) HotKey1: THotKey; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } procedure WMHotKey(var Msg:TMessage);message WM_HOTKEY; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var Key, Shift: Word; Id: Integer; procedure ShortCutToKey(ShortCut: TShortCut; var Key: Word; var Shift: TShiftState); begin Key := ShortCut and not (scShift + scCtrl + scAlt); Shift := []; if ShortCut and scShift <> 0 then Include(Shift, ssShift); if ShortCut and scCtrl <> 0 then Include(Shift, ssCtrl); if ShortCut and scAlt <> 0 then Include(Shift, ssAlt); end; function ShiftStateToWord(TShift: TShiftState): Word; begin Result := 0; if ssShift in TShift then Result := MOD_SHIFT; if ssCtrl in TShift then Result := Result or MOD_CONTROL; if ssAlt in TShift then Result:= Result or MOD_ALT; end; procedure TForm1.Button1Click(Sender: TObject); var T: TShiftState; begin Id := GlobalAddAtom('MyHotKey') - $C000; ShortCutToKey(HotKey1.HotKey, Key, T); Shift := ShiftStateToWord(T); RegisterHotKey(Handle, Id, Shift, Key); end; procedure TForm1.WMHotKey(var Msg: TMessage); begin if (Msg.LparamLo = Shift) AND (Msg.LParamHi = Key) then ShowMessage('This is HotKey'); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnRegisterHotKey(Handle, Id); GlobalDeleteAtom(Id); end; end.