【Delphi】登録ショートカット

1590 ワード

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.