一个 (50分)

  • 主题发起人 主题发起人 adminmaker
  • 开始时间 开始时间
------热键
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.
 
我试试先!
 
谢谢kingdeezj,50分双手奉上
不过还有个问题
就是我在这个程序的DPR文件里加了
Application.ShowMainForm:=false; //设置软件打开时窗口隐藏不可见
后再运行看这个程序
会发现打开程序后第一次按热键调出窗口程序会没反应
要按第2次才能调出窗口
要怎么解决呢
 
如能解决再送100分,谢谢了
 
问题已经解决,停止散分
其实
if Self.Showing then //按热键后如果窗口SHOW则
Self.Hide //隐藏窗口
else //如若不是
Self.Show; //窗口就显示
end;

就能解决第一次按热键调出窗口程序会没反应的问题
在次感谢kingdeezj
 
后退
顶部