程序在后台 ,响应热键(100分)

  • 主题发起人 主题发起人 冰锋
  • 开始时间 开始时间

冰锋

Unregistered / Unconfirmed
GUEST, unregistred user!
有哪些方法可以实现类似按键精灵的功能:比如,程序最小化或后台工作,
按下某一热键,程序可以模拟键盘鼠标发出一系列动作;不同的热键
响应不同的动作.这儿的问题主要是程序怎么知道哪个热键按下?程序里怎么
定义和调用?多个热键怎么定义?
另外,全局热键可以实现这个功能吗?全局热键可以定义多个吗?如果可以怎么调用?
 
hook
用钩子钩键盘事件
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3457359
 
一个程序可不可以有多个全局热键?
 
以下是F9,F10两个热键的完整实现:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
end;

var
Form1: TForm1;
F9_ID,F10_ID:integer;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
if GlobalFindAtom('MyF9HotKey') = 0 then
begin
F9_ID:=GlobalAddAtom('MyF9HotKey');
RegisterHotKey(handle,F9_id,0,VK_F9);
end;
if GlobalFindAtom('MyF10HotKey') = 0 then
begin
F10_ID:=GlobalAddAtom('MyF10HotKey');
RegisterHotKey(handle,F10_id,0,VK_F10);
end ;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(handle,F9_id);
GlobalDeleteAtom(F9_id);
UnRegisterHotKey(handle,F10_id);
GlobalDeleteAtom(F10_id);
end;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
if msg.HotKey = F9_id then form1.hide;
if msg.HotKey = F10_id then form1.show;
end;

end.
 
完全同意.
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY; 可以实现.
 
多人接受答案了。
 
后退
顶部