unit   Unit1;   
    
  interface   
    
  uses   
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,   
      StdCtrls;   type 
TForm1 = class(TForm) 
procedure FormCreate(Sender: TObject); 
procedure FormDestroy(Sender: TObject); 
protected 
procedure hotykey(var msg:TMessage); message WM_HOTKEY; 
end; var 
Form1: TForm1; 
id,id2:Integer; implementation {$R *.DFM} 
procedure TForm1.hotykey(var msg:TMessage); 
begin 
if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=81) then 
begin 
ShowMessage('Ctrl + Q '); 
end; if (msg.LParamLo=MOD_CONTROL) and (msg.LParamHi=82) then 
begin 
ShowMessage('Ctrl + R '); 
end; 
end; 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
id:=GlobalAddAtom('hotkey'); 
RegisterHotKey(handle,id,mod_control,81); id2:=GlobalAddAtom('hotkey2'); 
RegisterHotKey(handle,id2,mod_control,82); 
end; procedure TForm1.FormDestroy(Sender: TObject); 
begin 
UnRegisterHotKey(handle,id); 
UnRegisterHotKey(handle,id2); 
end;
END.

解决方案 »

  1.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        procedure WMHotKey(var AMsg: TWMHotkey); message WM_HOTKEY;  //处理热键
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      RegisterHotKey(Handle,1,MOD_ALT,81);     //注册热键 Alt + q
      RegisterHotKey(Handle,2,MOD_CONTROL,82); //注册热键 Ctrl + r
      RegisterHotKey(Handle,3,MOD_SHIFT,83);   //注册热键 Shift + s
    end;procedure TForm1.WMHotKey(var AMsg: TWMHotkey);
    begin
      case AMsg.HotKey of
        1: Caption := 'Alt + Q';
        2: Caption := 'Ctrl + R';
        3: Caption := 'Shift + S';
      end;
    end;end.
      

  2.   

    楼主的代码是可以运行的, 其中hotykey消息处理部分可以简化一下:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
        id1, id2: Integer;
        procedure hotykey(var msg:TMessage); message WM_HOTKEY;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.hotykey(var msg:TMessage);
    begin
      if msg.WParam = id1 then ShowMessage('Ctrl + Q ');
      if msg.WParam = id2 then ShowMessage('Ctrl + R ');
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      id1:=GlobalAddAtom('hotkey');
      RegisterHotKey(Handle, id1, mod_control, 81);
      id2:=GlobalAddAtom('hotkey2');
      RegisterHotKey(Handle, id2, mod_control, 82);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      UnRegisterHotKey(Handle, id1);
      UnRegisterHotKey(Handle, id2);
    end;