我想在我的程序退出时,给用户提示:"程序退出了"正常操作是关闭窗体Form1.close 或者 Application.Terminate,这样FormDestroy完全可实现提示用户.
但是当用户在"任务管理器里结束进程时",就没有消息提示了.(据说HOOK可以实现,但是找了几个方法,还是无法获取关闭消息)
恳请各路大人帮帮忙,谢谢!unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
HookHandle: HHOOK;
function CloseHookProc(Code: Integer; WParam: WParam; Msg: LongInt): LRESULT; stdcall;implementation{$R *.dfm}function CloseHookProc(Code: Integer; WParam: WParam; Msg: LongInt): LRESULT; stdcall;
begin
if Code = HC_ACTION then
if PMsg(Msg)^.message = WM_close then
begin
Application.MessageBox('程序关闭了!', '提示', MB_OK);
PMsg(Msg)^.message := 0; //拦截消息窗体关闭消息
Result := 0; //不把消息传出去
end
else
Result := CallNextHookEx(HookHandle, Code, WParam, Longint(@Msg));
end; //钩子回调函数procedure TForm1.FormDestroy(Sender: TObject);
begin
Application.MessageBox('程序关闭了!', '提示', MB_OK);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
HookHandle := SetWindowsHookEx(WH_CALLWNDPROC, CloseHookProc, HInstance, GetCurrentThreadID); //钩住自己的主窗
end;end.
但是当用户在"任务管理器里结束进程时",就没有消息提示了.(据说HOOK可以实现,但是找了几个方法,还是无法获取关闭消息)
恳请各路大人帮帮忙,谢谢!unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
HookHandle: HHOOK;
function CloseHookProc(Code: Integer; WParam: WParam; Msg: LongInt): LRESULT; stdcall;implementation{$R *.dfm}function CloseHookProc(Code: Integer; WParam: WParam; Msg: LongInt): LRESULT; stdcall;
begin
if Code = HC_ACTION then
if PMsg(Msg)^.message = WM_close then
begin
Application.MessageBox('程序关闭了!', '提示', MB_OK);
PMsg(Msg)^.message := 0; //拦截消息窗体关闭消息
Result := 0; //不把消息传出去
end
else
Result := CallNextHookEx(HookHandle, Code, WParam, Longint(@Msg));
end; //钩子回调函数procedure TForm1.FormDestroy(Sender: TObject);
begin
Application.MessageBox('程序关闭了!', '提示', MB_OK);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
HookHandle := SetWindowsHookEx(WH_CALLWNDPROC, CloseHookProc, HInstance, GetCurrentThreadID); //钩住自己的主窗
end;end.
解决方案 »
- 远程dll线程资源释放问题
- 如何获得 本机网卡的网卡名称的字符串? 如"本地连接" 注册表中能获取,但是每台机的键值都不同!!
- 动态生成文本框控件后如何得到用户的焦点?
- 激死!C++ Builder6的TIdHTTP对象跟Delphi7的不同吗?!高手帮我看看这两段代码不何不同?!
- ehlib 的 DBGridEh 最后一行汇总栏更新数据时不能即时刷新,不知在哪设
- 在线等待,谁有Delphi中报表QuickReport的汉化包
- 大家快求命啊,delphi调用word的问题???
- 大家给我推荐一本关于SQLSERVER2000的好书!
- 请问怎么样在程序里动态创建NMSMTP控件?
- Delphi 支持 ActiveX控件吗?
- 哪位高手帮忙看看哪里错了啊,谢谢
- 低级问题
但是你看瑞星的那RAV.EXE为什么不能结束进程呢?