如何使应用程序不显示在关闭程序对话框任务列表中?(50分)

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

chenke

Unregistered / Unconfirmed
GUEST, unregistred user!
按ctrl+alt+del出现关闭程序对话框.
 
Please use:
RegisteServiceProcess(NULL, RSP_SIMPLE_SERVICE);

To access RegisterServiceProcess, retrieve a function pointer using
GetProcAddress() on KERNEL32.DLL.

RegisterServiceProcess
----------------------

DWORD RegisterServiceProcess(
DWORD dwProcessId, // process identifier
DWORD dwServiceType // type of service
);

Parameters:

- dwProcessId: Specifies the identifier of the process to register as a
service process or NULL to register the current process. An
application receives the process ID when it uses CreateProcess() to
start the application.

- dwServiceType: One of the following values:

Define Value Meaning
RSP_SIMPLE_SERVICE 0x00000001 Registers the process as a
simple service process.

RSP_UNREGISTER_SERVICE 0x00000000 Unregisters the process as a
service process.

Return Value:

The return value is 1 if successful or 0 if an error occurs.
Note: when your application exit, you should call this function again to unregister yourself,
or it will start automatically next you start windows, :)
 
此答案来自<a href="http://www.zg169.net/~randolph/">Delphi开发室</a>
>>怎样编一个在任务栏不可见的程序
1、创建一个新的项目
2、重载CreateParams,修改Params.WndParent := GetForegroundWindow
3、创建一个新的单元,initialization处增加IsLibrary := True
4、修改工程文件的uses段使Unit2为第一行
5、OK
具体程序如下,你也可以<a href="http://www.zg169.net/~randolph/islib.zip">下载</a>。
 
还是这个方法简单:
隐藏程序:
Showwindow(FindWindow (nil,@Application.Title[1]),sw_hide);
这样Win95/WinNT的任务管理器就看不见此程序title了。
不过WinNT中察看进程还是看得见程序名的。可以取一个古怪或象系统文件一样的
程序名。:)
另外,窗口仍然可见,但只要Hide就可以了。
显示出来:
showwindow(FindWindow (nil,@Application.Title[1]),sw_restore);
 
Pegasus大侠:
如下一段程序,运行总是不成功,请指教,先谢了。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, StdCtrls;
type
TRegisterProcess=function (
dwProcessId:dword;
dwServiceType:dword
): dword;
type

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
Module:THandle;
PFunc: TFarProc;
x:Dword;
begin
Module := Loadlibrary('kernel32.dll');
//if Module > 32 then
// begin
Pfunc := GetProcAddress(Module,'RegisterServiceProcess');
x:=TRegisterProcess(PFunc)(null,$00000001);
showmessage(IntToStr(x));
// end;
Freelibrary(Module);
end;

end.
 
将此文件加到工程文件中:
unit regsrv;
interface
uses windows;
const
RSP_SIMPLE_SERVICE=1;
UNRSP_SIMPLE_SERVICE=0;
function RegisterServiceProcess(dwProcessId:DWORD;dwType:DWORD):DWORD;stdcall;
implementation
function RegisterServiceProcess(dwProcessId:DWORD;dwType:DWORD):DWORD;
external 'KERNEL32.DLL' name 'RegisterServiceProcess';
end.

//-----------
使用:
RegisterServiceProcess(dwProcessId;RSP_SIMPLE_SERVICE);
//如果是当前应用dwProcessId=0;
 
To ChenKe:
这段程序怎么使用了从C++风格的注释? 我还真不知道Delphi也能用.
运行总是不成功, 有没有获得到这个函数的指针?
//如果您是在NT下, 应当在函数名称后面加上一个A,
//(不过这个函数只有95才有, :)
要是还有问题, 请这样用吧:
const
RSP_SIMPLE_SERVICE = $00000001;
RSP_UNREGISTER_SERVICE = $00000000;
// Parameter dwProcessId can be 0, same effect as GetCurrentProcessId
// Return Values: True(1) means success
function RegisterServiceProcess(dwProcessId, dwServiceType: DWord): Bool;
stdcall;
// Place in "implementation" session
function RegisterServiceProcess;
external 'Kernel32.dll' Name 'RegisterServiceProcess';
// Example:
// RegisterServiceProcess(0, RSP_SIMPLE_SERVICE);
// RegisterServiceProcess(0, RSP_UNREGISTER_SERVICE);
 
DELPHI 2不能使用// D3可以;)
 
同志们,这个办法不能在NT中用是肯定的 :)
 
在NT下可以用SERVICE
pegasus欠我一个
 
多人接受答案了。
 
to cj:
在nt下不能使用registerserviceprocss是肯定的
您的话是什麽意思?
 
后退
顶部