后台监控软件为了达到隐蔽监控的目的应该满足正常运行时不显示在任务栏上在按Ctrl+Alt+Del出现的任务列表中也不显示管理员可以通过热键调出隐藏的运行界面要作到这些必须把当前进程变为一个系统服务并且定义全局热键 一把当前进程变为一个系统服务 目的是在任务列表中把程序隐藏起来调用API函数RegisterServiceProcess实现 二定义全局热键(本例中定义热键Ctrl+Del+R)步骤 定义捕获Windows消息WM_HOTKEY的钩子函数即 procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY; 向Windows加入一个全局原子 Myhotkey: GlobalAddAtom(MyHotkey) 并保留其句柄 向Windows登记热键调用API函数RegisterHotKey实现 三设计界面和源程序 unit Unit; interface uses Windows Messages Forms Dialogs Classes Controls StdCtrls; type TForm = class(TForm) Button: TButton; Button: TButton; procedure FormCreate(Sender: TObject); procedure ButtonClick(Sender: TObject); procedure ButtonClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private {热键标识ID} id: Integer; procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY; { PrivatDeclarations} public { PublicDeclarations} end; var Form : TForm; implementation const RSP_SIMPLE_SERVICE=; function RegisterServiceProcess (dwProcessID dwType: DWord) : DWord; stdcall; external KERNELDLL; {$R *DFM} {捕获热键消息} procedure TFormWMHotKey (var Msg : TWMHotKey); begin if msgHotKey = id then ShowMessage(Ctrl+Alt+R键被按下!); formVisible :=true; end; procedure TFormFormCreate(Sender: TObject); Const {ALTCTRL和R键的虚拟键值} MOD_ALT = ; MOD_CONTROL = ; VK_R = ; begin {首先判断程序是否已经运行} if GlobalFindAtom(MyHotkey) = then begin {注册全局热键Ctrl + Alt + R} id:=GlobalAddAtom(MyHotkey); RegisterHotKey(handleidMOD_CONTROL+MOD_AltVK_R); end else halt; end; {把当前进程变为一个系统服务从而在任务列表中把程序隐藏起来} procedure TFormButtonClick(Sender: TObject); begin RegisterServiceProcess(GetCurrentProcessIDRSP_SIMPLE_SERVICE); formHide; end; procedure TFormButtonClick(Sender: TObject); begin close; end; {退出时释放全局热键} procedure TFormFormClose(Sender: TObject; var Action: TCloseAction); begin UnRegisterHotKey(handleid); GlobalDeleteAtom(id); end; end 四说明 在后台监控软件中使用以上功能可真正实现隐蔽运行热键调出便于管理员进行管理程序在WinDelphi中运行通过 |