delphi程序热键

要定义一个全局热键,通常有三个步骤:

  1、定义Windows的消息WM_HOTKEY的HOOK链,即

   procedure MyShortCut(Var Message:TMessage);Message WM_HOTKEY;  

  2、向Windows加入一个全局原子hotkey:GlobalAddAtom(’hotkey’), 并保留其句柄   

  3、向Windows登记热键链: RegisterHotKey 函数原形如下

    BOOL RegisterHotKey(

              HWND hWnd,        // 连接热键的窗口句柄

              int id,            // 全局原子句柄

              UINT fsModifiers,      // 热键修饰标志

              UINT vk           // 虚拟键盘码

              ); 

  这里,fsModifiers是指虚拟键盘码vk结合何种键一起生成WM_HOTKEY的消息,它是下列三值的组合:

    MOD_ALT      // ALT 键必须按下

    MOD_CONTROL   // CTRL 键必须按下

    MOD_SHIFT     // SHIFT 键必须按下

  有了这些准备,你就可以定义自己喜欢的方式了。

  下面是一个范例,当CTRL+Q在任何时候被按下时,都会打出“你好,Crtl+Q被按下”的信息。

  

[delphi]view plaincopyprint?

type

    TForm1 = class(TForm)

    procedure FormCreate(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    protected

    procedure myshortcut(var message: TMessage); message WM_HOTKEY;

    private

  { Private-Deklarationen }

    public

  { Public-Deklarationen }

  end;

  var

   Form1: TForm1;

   id:Integer;

  implementation

   {$R *.DFM}

  procedure TForm1.myshortcut(var message: TMessage);

  begin

   ShowMessage(’你好,Crtl + Q 被按下’);

  end;

  procedure TForm1.FormCreate(Sender: TObject);

  begin

    id:=GlobalAddAtom(’hotkey’);

    RegisterHotKey(Handle,id,MOD_CONTROL,88); // 88是Q的ASCII值

  end;

  退出时候取消热键定义:

  procedure TForm1.FormDestroy(Sender: TObject);

  begin

   UnRegisterHotKey(Handle,id);

  end;