快捷键(50分)

  • 主题发起人 主题发起人 wcidwmy
  • 开始时间 开始时间
W

wcidwmy

Unregistered / Unconfirmed
GUEST, unregistred user!
高手请答:
我写一个隐藏窗体程序,在隐藏前设定的快捷键可以关闭程序,但启动隐藏后,就不行了
按下快捷键后毫无反应,是不是隐藏后程序不是当前操作系统中在前台运行的程序了,怎么解决,
请高手指教
 
一般来说,键盘按键是由当前带有焦点的程序来接收,如果你的程序不是当前带有输入
焦点的程序的话,你的按键是不会接收到的,所以最好使用键盘钩子来解决问题。
 
那应该如何用钩子程序
能不能写出来
 
先 RegisterHotKey(Handle,SPEAK_COMEIN,0,VK_F9);

procedure TForm1.WMHotKey(var vMessage: TMessage);
begin
if vMessage.WParam=SPEAK_COMEIN then begin
~~~~~
 
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
hotkeyid :integer;
procedure WMhotkeyhandle(var msg:Tmessage);
message wm_hotkey; //响应敏感键按键消息
public
{ Public declarations }
end;

var
Form1: TForm1;
showit:boolean=false;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
hotkeyid:=GlobalAddAtom(pchar('UserDefineHotKey'))-$C000;
//减去$C000是为了保证取值范围的限制
registerhotkey(handle,hotkeyid,MOD_CONTROL+MOD_ALt,$41);
//敏感键为ctrl+Alt+A
end;
procedure TForm1.Wmhotkeyhandle(var msg:Tmessage);
begin
if (msg.LParamHi=$41)then
begin
msg.Result:=1; //该消息已经处理
if showit then begin
Form1.Show;
showit:=false;
end
else
begin
form1.Hide;
showit:=true;
end;
//把窗口最前面显示
end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
unregisterhotkey(handle,hotkeyid);
DeleteAtom(HotKeyID);
end;

end.
 
后退
顶部