在Windows98/ME中我使用以下函数在关闭程序窗口中隐藏进程。为什么运行在XP下提示找不到KERNEL32.DLL文件,请问各位大侠,这如何解决啊!有更好的方法吗?
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL'

解决方案 »

  1.   

    msdn中都说了
    The function is supported by the Windows 95/98/Me SCM.
      

  2.   

    因为NT/2000/XP有不同的服务核心,所以它不能用,如果真要在NT/2000/XP下写这样的程序,你必须hook某些API来阻塞你的应用程序显示在任务列表中。
    可以到这来下载一些关于怎样阻塞API的例子,不过有些步骤需要用到汇编。
    http://www.anticracking.sk/EliCZ/export.htm
    不要问我具体怎么写,我也没有仔细去看过。你也可以用下面几种方法实现相同的功能
    1)使用C++写一个"Device Driver". 当它们加载时,*.SYS 文件不会显示在任务管理器中
    2)在Delphi中写一个Service.让普通用户不能杀掉这个.exe服务进程,只有管理员才可以做
    3)使用系统策略让任务管理器不能用
    4)在一个死循环中检查用户是否打开了任务管理器窗口,如果打开了,使用下面代码进行控制
    uses Windows,Messages; 
    var i:integer; 
    begin 
    repeat 
    i:=FindWindow(nil,'Windows NT Task Manager'); 
    if not(i=0) then PostMessage(i,WM_CLOSE,0,0); 
    until false 
    end.