编写后台监控软件的技巧
后台监控软件 为了达到隐蔽监控的目的 应该满足正常运行时 不显示在任务栏上 在按Ctrl+Alt+Del出现的任务列表中也不显示 管理员可以通过热键调出隐藏的运行界面 要作到这些 必须把当前进程变为一个系统服务 并且定义全局热键
一 把当前进程变为一个系统服务 目的是在任务列表中把程序隐藏起来 调用API函数RegisterServiceProcess实现
二 定义全局热键(本例中定义热键Ctrl+Del+R) 步骤 定义捕获Windows消息WM_HOTKEY的钩子函数 即 procedure WMHotKey(var Msg : MHotKey); 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 Button Click(Sender: TObject); procedure Button Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private {热键标识ID} id: Integer; procedure WMHotKey(var Msg : MHotKey); message WM_HOTKEY; { Privat Declarations} public { Public Declarations} end; var Form : TForm ; implementation const RSP_SIMPLE_SERVICE= ; function RegisterServiceProcess (dwProcessID dwType: DWord) : DWord; stdcall; external KERNEL DLL ; {$R * DFM}
{捕获热键消息} procedure TForm WMHotKey (var Msg : MHotKey); begin if msg HotKey = id then ShowMessage( Ctrl+Alt+R键被按下! ); form Visible :=true; end;
procedure TForm FormCreate(Sender: TObject); Const {ALT CTRL和R键的虚拟键值} MOD_ALT = ; MOD_CONTROL = ; VK_R = ; begin {首先判断程序是否已经运行} if GlobalFindAtom( MyHotkey ) = then begin {注册全局热键Ctrl + Alt + R} id:=GlobalAddAtom( MyHotkey ); RegisterHotKey(handle id MOD_CONTROL+MOD_Alt VK_R); end else halt; end;
{把当前进程变为一个系统服务 从而在任务列表中把程序隐藏起来} procedure TForm Button Click(Sender: TObject); begin RegisterServiceProcess(GetCurrentProcessID RSP_SIMPLE_SERVICE); form Hide; end;
procedure TForm Button Click(Sender: TObject); begin close; end; {退出时释放全局热键} procedure TForm FormClose(Sender: TObject; var Action: TCloseAction); begin UnRegisterHotKey(handle id); GlobalDeleteAtom(id); end; end
lishixinzhi/Article/program/Delphi/201311/25039