后台监控软件,为了达到隐蔽监控的目的,应该满足正常运行时,不显示在任务栏上,在按Ctrl+Alt+Del出现的任务列表中也不显示,管理员可以通过热键调出隐藏的运行界面。要作到这些,必须把当前进程变为一个系统服务,并且定义全局热键。
一、把当前进程变为一个系统服务:
目的是在任务列表中把程序隐藏起来。调用API函数RegisterServiceProcess实现。
二、定义全局热键(本例中定义热键Ctrl+Del+R),步骤:
1、定义捕获Windows消息WM_HOTKEY的钩子函数,即:procedure WMHotKey(var Msg:TWMHotKey); message WM_HOTKEY;
2、向Windows加入一个全局原子 Myhotkey:GlobalAddAtom(’MyHotkey’),并保留其句柄。
3、向Windows登记热键:调用API函数RegisterHotKey实现。
三、源程序:unit Unit1;interfaceusesWindows, Messages, Forms,Dialogs,Classes, Controls, StdCtrls;typeTForm1 =class(TForm)Button1:TButton;Button2: TButton;procedureFormCreate(Sender: Tt);procedureButton1Click(Sender: Tt);procedureButton2Click(Sender:Tt);procedure FormClose(Sender: Tt; varAction:TCloseAction);private热键标识IDid: Integer;procedureWMHotKey(var Msg :TWMHotKey);messageWM_HOTKEY;Privat-DeclarationspublicPublic-Declarationsend;varForm1:TForm1;implementationconstRSP_SIMPLE_SERVICE=1;nRegisterServiceProcess (dwProcessID, dwType:DWord) : DWord;stdcall; external ’KERNEL32.DLL’;$R*.DFM捕获热键消息procedureTForm1.WMHotKey (var Msg : TWMHotKey);beginifmsg.HotKey =idthenShowMessage(’Ctrl+Alt+R键被按下!’);form1.Visible:=true;end;procedureTForm1.FormCreate(Sender:Tt);ConstALT、CTRL和R键的虚拟键值MOD_ALT =1;MOD_CONTROL = 2;VK_R =82;begin首先判断程序是否已经运行ifGlobalFindAtom(’MyHotkey’) = 0thenbegin注册全局热键Ctrl + Alt+Rid:=GlobalAddAtom(’MyHotkey’);RegisterHotKey(handle,id,MOD_CONTROL+MOD_Alt,VK_R);endelsehalt;end;
把当前进程变为一个系统服务,从而在任务列表中把程序隐藏起来procedureTForm1.Button1Click(Sender:Tt);beginRegisterServiceProcess(GetCurrentProcessID,RSP_SIMPLE_SERVICE);form1.Hide;end;procedureTForm1.Button2Click(Sender:Tt);beginclose;end;退出时释放全局热键procedureTForm1.FormClose(Sender: Tt;varAction:TCloseAction);beginUnRegisterHotKey(handle,id);GlobalDeleteAtom(id);end;end.
四、说明:
在后台监控软件中使用以上功能,可真正实现隐蔽运行,热键调出,便于管理员进行管理。程序在Win98,Delphi5.0中运行通过。
|