如何使程序在后台运行?(11:30前在线等待) (100分)

  • 主题发起人 主题发起人 cxrcg
  • 开始时间 开始时间
C

cxrcg

Unregistered / Unconfirmed
GUEST, unregistred user!
我编写了一个检测邮件的程序,希望计算机启动后在后台运行(不是将它极小化)
对于操作员来说并不感觉监测系统在运行,如有邮件,则跳出一个窗口提示。
请告知如何实现?
 
写个‘服务’程序,容许和桌面交互就可以了

服务 设成 ‘自动’ 起机时就自动起来了。

不过 98 没有服务
 
我是win98
 
在后台运行的概念就是没有在任务兰显示吧,找一找如何把程序隐藏的主题,很easy的
 
我找不到!
 
Delphi编写后台监控软件
后台监控软件,为了达到隐蔽监控的目的,应该满足正常运行时,不显示在任务栏上,在按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;
interface
uses
Windows, Messages, Forms, Dialogs, Classes, Controls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{热键标识ID}
id: Integer;
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
{ Privat-Declarations}
public
{ Public-Declarations}
end;
var
Form1 : TForm1;
implementation
const RSP_SIMPLE_SERVICE=1;
function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord; stdcall; external ’KERNEL32.DLL’;
{$R *.DFM}

{捕获热键消息}
procedure TForm1.WMHotKey (var Msg : TWMHotKey);
begin
if msg.HotKey = id then
ShowMessage(’Ctrl+Alt+R键被按下!’);
form1.Visible :=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
Const
{ALT、CTRL和R键的虚拟键值}
MOD_ALT = 1;
MOD_CONTROL = 2;
VK_R = 82;
begin
{首先判断程序是否已经运行}
if GlobalFindAtom(’MyHotkey’) = 0 then
begin
{注册全局热键Ctrl + Alt + R}
id:=GlobalAddAtom(’MyHotkey’);
RegisterHotKey(handle,id,MOD_CONTROL+MOD_Alt,VK_R);
end
else
halt;
end;


  {把当前进程变为一个系统服务,从而在任务列表中把程序隐藏起来}


procedure TForm1.Button1Click(Sender: TObject);
begin
RegisterServiceProcess(GetCurrentProcessID,RSP_SIMPLE_SERVICE);
form1.Hide;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
{退出时释放全局热键}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle,id);
GlobalDeleteAtom(id);
end;
end.


  四、说明:

  在后台监控软件中使用以上功能,可真正实现隐蔽运行,热键调出,便于管理员进行管理。程序在Win98,Delphi5.0中运行通过

 
RegisterServiceProcess函数要Use什么?
我怎么不能用RegisterServiceProcess函数
 
我没想到有如此复杂,等我试验后,如果成功再给你分,谢谢!!
其他高手还有更简单的方法吗???
 
接受答案了.
 
后退
顶部