如何让自己的程序不能关闭(只能按关闭按钮才能关闭)(100分)

  • 主题发起人 主题发起人 qfgj
  • 开始时间 开始时间
Q

qfgj

Unregistered / Unconfirmed
GUEST, unregistred user!
如何让自己的程序不能在任务管理器里面关闭,也不能在进程里面结束
 
那不是成精了?!
 
提升程序级别,但是没有不被关闭的,只是可以用另一程序监控而已[:D]
 
这样可以有一定的效果(close、ALT+F4失效)<br>unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, StdCtrls;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp; &nbsp; procedure FormClose(Sender: TObject; var Action: TCloseAction);<br>&nbsp; &nbsp; procedure FormCreate(Sender: TObject);<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br>&nbsp; ac:TCloseAction;<br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; ac:=cafree;<br>&nbsp; close;<br>end;<br><br>procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);<br>begin<br>&nbsp; action:=ac;<br>end;<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp; ac:=caNone;<br>end;<br><br>end.<br>
 
把自己的程序隐藏,不在任务管理器中出现,不就可以了吗?
 
<br>program Project1;<br><br>uses<br>Forms,<br>Unit1 in 'Unit1.pas' {Form1},<br>Windows;<br><br>{$R *.RES}<br><br>var<br>ExtendedStyle : Integer;<br><br>begin<br>Application.Initialize;<br><br>//============================================================== <br>ExtendedStyle := GetWindowLong (Application.Handle, GWL_EXSTYLE);<br><br>SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle OR WS_EX_TOOLWINDOW<br>AND NOT WS_EX_APPWINDOW);<br>//=============================================================== <br><br>Application.CreateForm(TForm1, Form1);<br>Application.Run;<br>end. <br>///////////////////////////////////////////////////////////////<br>procedure TForm1.FormCreate(sender:TObject);<br>begin<br>SetWindowLong(Application,Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);<br>end;<br>/////////////////////////////////////////////////////////<br>ShowWindow(Application.Handle, SW_HIDE); <br>SetWindowLong(Application.Handle, GWL_EXSTYLE, <br>&nbsp; GetWindowLong(Application.Handle, GWL_EXSTYLE) <br>&nbsp; &nbsp; or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); &nbsp;<br>
 
to:let_it_be<br>这样做我试过了,只是任务栏不出现,但任务管理器里面还是有
 
implementation<br>function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';<br>{$R *.DFM}<br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp; RegisterServiceProcess(GetCurrentProcessID, 1);<br>end;
 
还有一种方法<br>type<br>&nbsp; TRegisterServiceProcess = function (dwProcessID, dwType:DWord) : DWORD; stdcall;<br><br>{$R *.DFM}<br><br>procedure TForm1.FormCreate(Sender: TObject);<br>var<br>&nbsp; H :THandle;<br>&nbsp; RegisterServiceProcess: TRegisterServiceProcess;<br>begin<br>&nbsp; H:=LoadLibrary('KERNEL32.DLL');<br>&nbsp; RegisterServiceProcess:=GetProcAddress(H, 'RegisterServiceProcess');<br>&nbsp; RegisterServiceProcess (GetCurrentProcessID, 1);<br>&nbsp; FreeLibrary(H);<br>end;
 
看看关闭消息是谁发送的?
 
不知zxdcj的方法是否可行,测试过吗?<br><br>在主窗体中拦截Close消息试一试。仅供参考
 
除非你的程序不出现在进程窗口中
 
楼上的RegisterServiceProcess(GetCurrentProcessID, 1)应该可行,再就是在窗体的<br>close和closequery要定义。
 
什么破程序啊 ? 有这样的要求
 
不如这样:在自己程序设一个全局变量close:=false;然后拦截自己的关闭消息,<br>如果close:=false,不关,自己要关的时候先close:=true;但是,如果别人模拟鼠标<br>点你的'叉叉',又怎么办?还有,如果是操作系统强行关的话,也没辙! &nbsp;[:(]
 
彻底的解决办法就是完全做成一个木马程序,完全的隐藏起来。<br>
 
用RegisterServiceProcess(GetCurrentProcessID, 1)注册服务器进程<br>再把WM_CLOSE消息拦截掉<br>应该差不多了
 
请看我做的一个程序(ajgz.rar):http://liumazi.efile.com.cn/<br>李张柏芝:请注意概念问题!隐藏不一定就是木马!隐藏是隐藏,木马是木马!<br>我想,楼主要的是什么效果?是看起来正常的程序(和普通程序一样)无法关闭,<br>还是通过隐藏或其他方法导致用户用普通方法难以关闭?<br><br>另外,RegisterServiceProcess在nt是无效的,根本没有这个函数。。。。<br><br>
 
想进程不备发现和杀掉,是不可能做到的。windows本身的进程都是可以被杀掉的。<br>下面的代码可以禁止掉一般的关闭,但是对杀进程一类的操作无效!<br><br>procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);<br>begin<br>&nbsp; &nbsp; CanClose := false;<br>end;
 
...<br>Private<br>&nbsp; &nbsp;procedure WMClose(var Msg:TWMClose);Message WM_CLOSE;<br>...<br>procedure TForm1.WMClose(var Msg:TWMClose);Message WM_CLOSE;<br>begin<br>&nbsp; &nbsp;MessageBeep(0);<br>end;<br>我在XP的任务管理器里面试验,结果是任务管理器认为这个程序没有响应,<br>将其强行关闭,好像在TForm1.WMClose这里还要加一个语句返回一个值才行。
 
后退
顶部