让程序不在任务栏上出现(100分)

  • 主题发起人 主题发起人 MicroZeng
  • 开始时间 开始时间
M

MicroZeng

Unregistered / Unconfirmed
GUEST, unregistred user!
普通的一个程序(或者是比较小)的程序,我在程序中调用
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
都可以使程序不在任务栏上出现.
但是某些程序(或者比较大的程序),我调用SelWindowLong确无效果,在任务栏
上还存在,只是图标不见了.在我写过的程序中, 有三个程序是这样的.
但是我如果在.dpr文加入SelWindowLong, 也可以使程序不在任务栏中出现.
就是在程序中调用一个过程不能实现这个功能.
请大虾帮忙!
 
Here you go:
function RegisterAsService : boolean;
const
RSP_SIMPLE_SERVICE = 1;
type
TRegisterServiceProcess = function (dwProcessID, dwType : DWORD) : DWORD;
stdcall;
var
RSP : TRegisterServiceProcess;
hMod : THandle;
begin

Result := false;
hMod := LoadLibrary('KERNEL32.DLL');
if hMod=0 then
exit;
@RSP := GetProcAddress(hMod, 'RegisterServiceProcess');
if @RSP=nil then
exit;
try
if RSP(0, RSP_SIMPLE_SERVICE)=1 then

Result := true;
finally
FreeLibrary(hMod);
end;

end;


Yours,
 
a simple one
function RegisterAsService : boolean;
const RSP_SIMPLE_SERVICE = 1;
var RSP : function (dwProcessID, dwType : DWORD) : DWORD;
stdcall;
begin

RSP:=GetProcAddress(GetModuleHandle(kernel32),'RegisterServiceProcess');
result:=(@RSP<>nil) and (RSP(0,RSP_SIMPLE_SERVICE)=1);
end;

 
CJ:能不能对你的代码稍微解释一下.
 
CJ的方法实际上是将进程注册为服务进程。
但是这样一来,仅仅是将程序从进程查看器(热启时出现的小框)中去掉。
要从任务栏上去掉,可以
ShowWindow(Application.Handle, false);
 
to RedCat,
CJ的方法不仅可以从任务列表上去掉,而且
也不会在任务栏上显示。
 
谢谢liukeen:-)
谢谢RedCat的指正,如果不想在CTRL-ALT-DEL的对话盒里取消任务名,我的
方法的确有问题,对不起
MicroZeng:
可以查RegisterService的用发,正如RedCat兄说的,的确是注册为一个服务
我记得立宪里有一个(筐)构件的,不过,为了这个用构件不太值得吧。
 
ShowWindow(Application.Handle, SW_HIDE);
 
后退
顶部