这是一个放到后台的监控程序,由一个FORM,两个BOTTON组成,所实现的功能只是:按下CTRL+ALT+DEL时看不到进程,按其中一个按钮可以把此FORM隐藏,按另一个按钮退出程序。
unit Unit1;
interface
uses
Windows, Messages, Forms, Dialogs, Classes, Controls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{热键标识ID}
id: Integer;
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
{ Privat-Declarations}
public
{ Public-Declarations}
end;
var
Form1 : TForm1;
implementation
const RSP_SIMPLE_SERVICE=1;
function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord; stdcall; external ’KERNEL32.DLL’;
{$R *.DFM} {捕获热键消息}
procedure TForm1.WMHotKey (var Msg : TWMHotKey);
begin
if msg.HotKey = id then
ShowMessage(’Ctrl+Alt+R键被按下!’);
form1.Visible :=true;
end; procedure TForm1.FormCreate(Sender: TObject);
Const
{ALT、CTRL和R键的虚拟键值}
MOD_ALT = 1;
MOD_CONTROL = 2;
VK_R = 82;
begin
{首先判断程序是否已经运行}
if GlobalFindAtom(’MyHotkey’) = 0 then
begin
{注册全局热键Ctrl + Alt + R}
id:=GlobalAddAtom(’MyHotkey’);
RegisterHotKey(handle,id,MOD_CONTROL+MOD_Alt,VK_R);
end
else
halt;
end;
{把当前进程变为一个系统服务,从而在任务列表中把程序隐藏起来}
procedure TForm1.Button1Click(Sender: TObject);
begin
RegisterServiceProcess(GetCurrentProcessID,RSP_SIMPLE_SERVICE);
form1.Hide;
end; procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
{退出时释放全局热键}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle,id);
GlobalDeleteAtom(id);
end;
end.
1.什么是钩子函数?
2.Const
{ALT、CTRL和R键的虚拟键值}
MOD_ALT = 1;
MOD_CONTROL = 2;
VK_R = 82;
delphi帮助中的虚拟键值表都是以vk_开头的,没见MOD_开头的。
MOD_ALT
MODCONTROL指的是什么呢?我将MOD改为了VK并运行了一下,可以实现例子所说的功能。
3.在窗体上双击按钮会跳到按钮的click过程中写代码,双击窗体会跳到窗体的CREATE过程中编写代码,但好多时候不仅仅只需要这两种过程,还要其它的,比如窗体关闭时需要一个过程,或者有时要写一些过程,而这些过程和按钮,窗体之类的无直接关联,但又要在这个软件中用到,那这些过程名字不会自动生成吗?如果不能直接生成,那这些过程的名字需要怎么写呢?必须要写tform1.XXX?
暂时不知道点数拿来做什么用的,但由于我是一个问题很多的新手,所以比较吝啬,呵呵,不过估计热心的朋友们在论坛回答问题并不是为了一点区区的分数。谢谢了哈!
unit Unit1;
interface
uses
Windows, Messages, Forms, Dialogs, Classes, Controls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{热键标识ID}
id: Integer;
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
{ Privat-Declarations}
public
{ Public-Declarations}
end;
var
Form1 : TForm1;
implementation
const RSP_SIMPLE_SERVICE=1;
function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord; stdcall; external ’KERNEL32.DLL’;
{$R *.DFM} {捕获热键消息}
procedure TForm1.WMHotKey (var Msg : TWMHotKey);
begin
if msg.HotKey = id then
ShowMessage(’Ctrl+Alt+R键被按下!’);
form1.Visible :=true;
end; procedure TForm1.FormCreate(Sender: TObject);
Const
{ALT、CTRL和R键的虚拟键值}
MOD_ALT = 1;
MOD_CONTROL = 2;
VK_R = 82;
begin
{首先判断程序是否已经运行}
if GlobalFindAtom(’MyHotkey’) = 0 then
begin
{注册全局热键Ctrl + Alt + R}
id:=GlobalAddAtom(’MyHotkey’);
RegisterHotKey(handle,id,MOD_CONTROL+MOD_Alt,VK_R);
end
else
halt;
end;
{把当前进程变为一个系统服务,从而在任务列表中把程序隐藏起来}
procedure TForm1.Button1Click(Sender: TObject);
begin
RegisterServiceProcess(GetCurrentProcessID,RSP_SIMPLE_SERVICE);
form1.Hide;
end; procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
{退出时释放全局热键}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle,id);
GlobalDeleteAtom(id);
end;
end.
1.什么是钩子函数?
2.Const
{ALT、CTRL和R键的虚拟键值}
MOD_ALT = 1;
MOD_CONTROL = 2;
VK_R = 82;
delphi帮助中的虚拟键值表都是以vk_开头的,没见MOD_开头的。
MOD_ALT
MODCONTROL指的是什么呢?我将MOD改为了VK并运行了一下,可以实现例子所说的功能。
3.在窗体上双击按钮会跳到按钮的click过程中写代码,双击窗体会跳到窗体的CREATE过程中编写代码,但好多时候不仅仅只需要这两种过程,还要其它的,比如窗体关闭时需要一个过程,或者有时要写一些过程,而这些过程和按钮,窗体之类的无直接关联,但又要在这个软件中用到,那这些过程名字不会自动生成吗?如果不能直接生成,那这些过程的名字需要怎么写呢?必须要写tform1.XXX?
暂时不知道点数拿来做什么用的,但由于我是一个问题很多的新手,所以比较吝啬,呵呵,不过估计热心的朋友们在论坛回答问题并不是为了一点区区的分数。谢谢了哈!
钩子函数用于捕获系统消息,win32是个消息系统你明白吧??(不明白?晕看看书先)
2.mod开头的是辅助键值,单词是modificatory
3.你是要自定义函数过程吧,你可以定义到一个公共的PAS中作为一个公共的单元也可以直接在form内类进行定义,如果在form类进行定义,则是form类的函数,你可以设为私用,公共,保护的属性..建议先看书.这些都是基础知识啊...
PS:谢谢。