各位大虾好!我是初学者,现在在程序中需要自定义热键(比如:Alt+F1,Ctrl+Q),我知道要用到RegisterHotKey函数,但是具体怎么用不清楚,请大家帮帮忙!谢谢。最好能给我点代码参考一下

解决方案 »

  1.   

    晕,这个问题……好老的了 -_-#
    贴给你看看吧……
    ----------------------------------------------------------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        HotkeyF1,HotKeyF2:integer;
        procedure WMHotkeyHandle(var Msg: TMessage); message WM_HOTKEY;    { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      HotKeyF1:=GlobalAddAtom(pchar('UserDefinsHotKey1'))-$C000;
      RegisterHotKey(Form1.Handle,HotKeyF1,MOD_ALT ,VK_F1);          //alt+F1
      HotkeyF2:=GlobalAddAtom(pchar('UserDefinsHotKey2'))-$C000;
      RegisterHotKey(Form1.Handle,HotkeyF2, MOD_CONTROL ,ord('Q'));  //ctrl+q
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      UnregisterHotKey(Form1.Handle,1);
      DeleteAtom(HotkeyF1);
      DeleteAtom(HotkeyF2);
    end;procedure TForm1.WMHotkeyHandle(var Msg: TMessage);
    begin
      if Msg.WParam=HotkeyF1 then
         ShowMessage('alt+F1');
      if Msg.WParam=HotkeyF2 then
         ShowMessage('ctrl+q');
    end;end.
      

  2.   

    试了一下,可以了。多谢大虾!想再请教一下GlobalAddAtom是做什么用的?还有为什么要减去$C000?谢谢!