如何实现象金山词霸一样按一热键自动激活某一程序或弹出某一窗口???比如按Ctr+Shift+F1键弹出一个窗口?

解决方案 »

  1.   

    procedure TForm1.FormCreate(Sender: TObject); 
    Var TmpID:Integer; 
    begin 
     TmpID:=GlobalFindAtom('MyHotkey'); 
     if TmpID=0 then //查找全局原子.如果返回值不为0,则说明这个全局原子已经被注册; 
       id:=GlobalAddAtom('MyHotkey') 
     else 
       ID:=TmpID;  TmpID:=GlobalFindAtom('MyHotkey1'); 
     if TmpID=0 then 
       id1:=GlobalAddAtom('MyHotkey1') 
     else 
       id1:=TmpID;  TmpID:=GlobalFindAtom('MyHotkey2'); 
     if TmpID=0 then 
       id2:=GlobalAddAtom('MyHotkey2') 
     else 
       id2:=TmpID; 
     RegisterHotKey(Handle, id, MOD_CONTROL, VK_F1); //注册热键:Ctrl+F1 
     RegisterHotKey(Handle, id1, MOD_CONTROL, VK_F2);//注册热键:Ctrl+F2 
     RegisterHotKey(Handle, id2, MOD_CONTROL, VK_F3);//注册热键:Ctrl+F3 
    end; procedure TForm1.FormDestroy(Sender: TObject); 
    begin 
     UnregisterHotKey(Handle,ID);//释放热键Ctrl+F1 
     UnregisterHotKey(Handle,ID1);//释放热键Ctrl+F2 
     UnregisterHotKey(Handle,ID2);//释放热键Ctrl+F3 
     GlobalDeleteAtom(ID); //删除全局原子ID 
     GlobalDeleteAtom(ID1);//删除全局原子ID1 
     GlobalDeleteAtom(ID2);//删除全局原子ID2 
    end; procedure TForm1.WMHotKey(var Msg: TWMHotKey); 
    begin 
     if msg.HotKey=ID then //热键Ctrl+F1的消息. 
       ShowMessage('Ctrl+F1!') 
     else if Msg.HotKey=ID1 then //热键Ctrl+F2的消息. 
       ShowMessage('Ctrl+F2!') 
     else if Msg.HotKey=ID2 then //热键Ctrl+F3的消息. 
       ShowMessage('Ctrl+F3!'); 
    end; 
      

  2.   

    全代码:
    注册ctrl+shift+F1
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormDestroy(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        procedure WMHotKey(var Msg: TWMHotKey);message WM_HOTKEY;
      public
        { Public declarations }
        id,id1,id2: Integer;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject); 
    Var TmpID:Integer; 
    begin 
     TmpID:=GlobalFindAtom('MyHotkey'); 
     if TmpID=0 then //查找全局原子.如果返回值不为0,则说明这个全局原子已经被注册; 
       id:=GlobalAddAtom('MyHotkey')
     else 
       ID:=TmpID;  TmpID:=GlobalFindAtom('MyHotkey1'); 
     if TmpID=0 then 
       id1:=GlobalAddAtom('MyHotkey1') 
     else 
       id1:=TmpID;  TmpID:=GlobalFindAtom('MyHotkey2'); 
     if TmpID=0 then 
       id2:=GlobalAddAtom('MyHotkey2') 
     else 
       id2:=TmpID; 
     RegisterHotKey(Handle, id, MOD_CONTROL or MOD_SHIFT, VK_F1); //注册热键:Ctrl+Shift+F1
     RegisterHotKey(Handle, id1, MOD_CONTROL, VK_F2);//注册热键:Ctrl+F2 
     RegisterHotKey(Handle, id2, MOD_CONTROL, VK_F3);//注册热键:Ctrl+F3 
    end; procedure TForm1.FormDestroy(Sender: TObject); 
    begin 
     UnregisterHotKey(Handle,ID);//释放热键Ctrl+F1 
     UnregisterHotKey(Handle,ID1);//释放热键Ctrl+F2 
     UnregisterHotKey(Handle,ID2);//释放热键Ctrl+F3 
     GlobalDeleteAtom(ID); //删除全局原子ID 
     GlobalDeleteAtom(ID1);//删除全局原子ID1 
     GlobalDeleteAtom(ID2);//删除全局原子ID2 
    end; procedure TForm1.WMHotKey(var Msg: TWMHotKey);
    begin 
     if msg.HotKey=ID then //热键Ctrl+Shift+F1的消息. 
       ShowMessage('Ctrl+Shift+F1!') 
     else if Msg.HotKey=ID1 then //热键Ctrl+F2的消息. 
       ShowMessage('Ctrl+F2!') 
     else if Msg.HotKey=ID2 then //热键Ctrl+F3的消息. 
       ShowMessage('Ctrl+F3!');
    end;end.