电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

编写后台监控软件的技巧


发布日期:2023/3/7
 

后台监控软件为了达到隐蔽监控的目的应该满足正常运行时不显示在任务栏上在按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中运行通过

上一篇:如何在程序中使用自己的库单元

下一篇:利用DLL实现通用密码验证框