如何躲避ctrl+alt+del结束任务的列表(100分)

  • 主题发起人 主题发起人 netpuff
  • 开始时间 开始时间
N

netpuff

Unregistered / Unconfirmed
GUEST, unregistred user!
我编了一个程序但我希望能躲避ctrl+alt+del结束任务的列表,
那位大虾能指点谜经!
 
类似的问题本论坛有过多次讨论,可查一下。
 
下面隐藏一个程序,并使他从任务列表中消失。

TStartupInfo 这个结构中有一个 sShowWindow 栏位, 将之设为 SW_HIDE即可,
同时, dwFlags 标志中至少需含有 STARTF_USESHOWWINDOW, 否则CreateProcess
时, sShowWindow 栏位的设定会无效:

var
sCommandLine: string;
bCreateProcess: boolean;
lpStartupInfo: TStartupInfo;
lpProcessInformation: TProcessInformation;
begin
// sCommandLine 的内容请视您的情况修改
sCommandLine :='Xcopy d:/temp/temp1/*.* d:/temp/temp2 /v/y';
lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW;
lpStartupInfo.wShowWindow := SW_HIDE;
bCreateProcess := CreateProcess(nil, PChar(sCommandLine),nil,nil,True,
HIGH_PRIORITY_CLASS, nil, nil,lpStartupInfo, lpProcessInformation);
if bCreateProcess then
begin
WaitForSingleObject(lpProcessInformation.hProcess, INFINITE);
RegisterServiceProcess(lpProcessInfomation.hprocess,RSP_SIMPLE_SERVICE);//从任务列表中隐藏
end;
end;
 
Sorry ,改一下
var
sCommandLine: string;
bCreateProcess: boolean;
lpStartupInfo: TStartupInfo;
lpProcessInformation: TProcessInformation;
begin
// sCommandLine 的内容请视您的情况修改
sCommandLine :='Xcopy d:/temp/temp1/*.* d:/temp/temp2 /v/y';
lpStartupInfo.dwFlags := STARTF_USESHOWWINDOW;
lpStartupInfo.wShowWindow := SW_HIDE;
bCreateProcess := CreateProcess(nil, PChar(sCommandLine),nil,nil,True,
HIGH_PRIORITY_CLASS, nil, nil,lpStartupInfo, lpProcessInformation);
if bCreateProcess then
RegisterServiceProcess(lpProcessInfomation.hprocess,RSP_SIMPLE_SERVICE);//从任务列表中隐藏
end;
 
送你一个,我以前编程用到的实例

type
Tregisterserviceprocess=function(dwProcessID, dwType: integer):
integer; stdcall;

{$R *.RES}
//WinNT 不能使用下面的语句,使win9x不登记进程
var LibHandle:thandle;
version:tOSVERSIONINFO;
RegisterServiceProcess:tRegisterServiceProcess;
begin
version.dwOSVersionInfoSize:=sizeof(tOSVersionInfo);
if GetVersionEx(version) then
if version.dwPlatformId<>VER_PLATFORM_WIN32_NT then
begin
LibHandle:=loadLibrary('KERNEL32.DLL');
try
if LibHandle<>0 then
begin
@RegisterServiceProcess:=getprocaddress(libhandle,'RegisterServiceProcess');
if not(@RegisterServiceProcess=nil) then
begin
RegisterServiceProcess(GetCurrentProcessID, 1);
end;
end;
finally
freelibrary(libhandle);
end;
end;
......
end.
 
来晚了。。。
 
function RegisterServiceProcess(dwProcessId,dwType:dword): Integer;stdcall;external 'kernel32.dll'
第一个参数dwProcessID是一个进程的ID,第二个参数dwType如果为1则在Ctl+Alt+Del中就看不见了!
如果为0则又恢复了,函数调用成功返回1,否则返回0.
试试看:
RegisterServiceProcess(GetCurrentProcessID,1);
恢复:
RegisterServiceProcess(GetCurrentProcessID,0);
(其中GetCurrentProcessID是获得这个程序的进程号)

 
program project1;

uses
Windows,
Forms,
Main in 'MAIN.PAS' {Form1};

{$R *.RES}

begin
RegisterServiceProcess(GetCurrentProcessID,1);
Application.ShowMainForm:=False;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
就可以了。


我想问一下可否在PView95下也看不到此进程呢?
如何将DLL挂接到系统中呢?让系统启动时就调用了此DLL?
 
多人接受答案了。
 
后退
顶部