怎么样在delphi里面实现在任务栏里看不见的程序? ( 积分: 100 )

  • 主题发起人 主题发起人 wutianxiong
  • 开始时间 开始时间
W

wutianxiong

Unregistered / Unconfirmed
GUEST, unregistred user!
也就是说只能在后台进程里面看见。
 
也就是说只能在后台进程里面看见。
 
procedure TForm1.FormCreate(Sender: TObject);<br>begin<br> &nbsp; &nbsp;SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);<br>end;
 
showmainform:=falae;
 
showmainform:=falae;<br>showwindow(appliaction.handle, sw_hide);
 
可是一旦隐藏之后,该怎么马上恢复呢?
 
自己慢慢看吧:<br>用Delphi编写后台监控软件三<br><br>  后台监控软件,为了达到隐蔽监控的目的,应该满足正常运行时,不显示在任务栏上,在按Ctrl+Alt+Del出现的任务列表中也不显示,管理员可以通过热键调出隐藏的运行界面。要作到这些,必须把当前进程变为一个系统服务,并且定义全局热键。 <br><br>  一、把当前进程变为一个系统服务: <br><br>  目的是在任务列表中把程序隐藏起来。调用API函数RegisterServiceProcess实现。 <br><br> <br><br>  二、定义全局热键(本例中定义热键Ctrl+Del+R)<br><br>  步骤: <br><br>  1、定义捕获Windows消息WM_HOTKEY的钩子函数,即:procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY; <br><br>  2、向Windows加入一个全局原子 Myhotkey: GlobalAddAtom(’MyHotkey’), 并保留其句柄。 <br><br>  3、向Windows登记热键:调用API函数RegisterHotKey实现。 <br><br><br><br>  三、源程序: <br><br>unit Unit1; <br>interface <br>uses <br>Windows, Messages, Forms, Dialogs, Classes, Controls, StdCtrls; <br>type <br>TForm1 = class(TForm) <br>Button1: TButton; <br>Button2: TButton; <br>procedure FormCreate(Sender: TObject); <br>procedure Button1Click(Sender: TObject); <br>procedure Button2Click(Sender: TObject); <br>procedure FormClose(Sender: TObject; var Action: TCloseAction); <br>private <br>{热键标识ID} <br>id: Integer; <br>procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY; <br>{ Privat-Declarations} <br>public <br>{ Public-Declarations} <br>end; <br>var <br>Form1 : TForm1; <br>implementation <br>const RSP_SIMPLE_SERVICE=1; <br>function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord; stdcall; external ’KERNEL32.DLL’; <br>{$R *.DFM} <br><br>{捕获热键消息} <br>procedure TForm1.WMHotKey (var Msg : TWMHotKey); <br>begin <br>if msg.HotKey = id then <br>ShowMessage(’Ctrl+Alt+R键被按下!’); <br>form1.Visible :=true; <br>end; <br><br>procedure TForm1.FormCreate(Sender: TObject); <br>Const <br>{ALT、CTRL和R键的虚拟键值} <br>MOD_ALT = 1; <br>MOD_CONTROL = 2; <br>VK_R = 82; <br>begin <br>{首先判断程序是否已经运行} <br>if GlobalFindAtom(’MyHotkey’) = 0 then <br>begin <br>{注册全局热键Ctrl + Alt + R} <br>id:=GlobalAddAtom(’MyHotkey’); <br>RegisterHotKey(handle,id,MOD_CONTROL+MOD_Alt,VK_R); <br>end <br>else <br>halt; <br>end; <br><br><br>  {把当前进程变为一个系统服务,从而在任务列表中把程序隐藏起来} <br><br><br>procedure TForm1.Button1Click(Sender: TObject); <br>begin <br>RegisterServiceProcess(GetCurrentProcessID,RSP_SIMPLE_SERVICE); <br>form1.Hide; <br>end; <br><br>procedure TForm1.Button2Click(Sender: TObject); <br>begin <br>close; <br>end; <br>{退出时释放全局热键} <br>procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); <br>begin <br>UnRegisterHotKey(handle,id); <br>GlobalDeleteAtom(id); <br>end; <br>end. <br><br><br>  四、说明: <br><br>  在后台监控软件中使用以上功能,可真正实现隐蔽运行,热键调出,便于管理员进行管理。程序在Win98,Delphi5.0中运行通过。
 
恢复:showwindow(application.handle, SW_NORMAL);
 
showWindow(findwindow('Progman',nil),sw_Hide)
 
在2000/xp中好像不行
 
Application.Title:='';即可。
 
后退
顶部