禁止XP系统关机的疑问(50分)

  • 主题发起人 主题发起人 午夜棍子
  • 开始时间 开始时间

午夜棍子

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
==========================================================
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
private
[red]procedure OnWindowsEixt(var msg:Tmessage);message WM_QUERYENDSESSION;[/red]
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.OnWindowsEixt(var msg: Tmessage);
begin
[red]msg.result := 0;[/red]
ShowMessage('禁止关机');
end;

end.
=========================================================
为什么用这段代码禁止关机没用呢?
点击“开始”->“关闭计算机”->“关闭”后,仍然会关机。
 
没人帮我。
 
你需要使用api来控制acpi管理
或者把关机的windows动作禁用
 
你的过程有点问题,用下面的代码试试:
//Forms.Application.ShowMainForm :=False;
unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs;

type

TForm1 = class(TForm)
// procedure FormCreate(Sender: TObject);

private

{ Private declarations }

procedure QueryEndSession(var Msg:TMessage);Message WM_QueryEndSession;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.QueryEndSession(var Msg:TMessage);

begin
try
Msg.Result:=0;
showmessage('禁止关机!');
Except
end;
end;
end.
 
楼上的兄弟,你能说说你这段代码和我那段有什么区别吗????
我的过程名是“OnWindowsEixt”,你的是“QueryEndSession”,另外你加了try...except。
除此之外,好像没什么了吧?
 
我的爲什麽不行呢
 
具体我也不太清楚,也许OnWindowsEixt不能在XP下用,至于try...except只是为了容错,与本问题没有牵连。
 
WM_QUERYENDSESSION这个关机消息在XP以上并不总是在关机时发出的
 
那XP关机时是什么消息呢?
 
在9x时代,这样禁止关机是允许的,因为Windows在得到Result = 0的时候,就不再执行关机操作了。但是到NT时代,这个特性变化了(因为如果有程序禁止关机,会让用户苦恼,甚至认为是微软系统的问题),于是MS修正了执行代码,在指定时间内,程序不响应WM_QueryEndSession消息,则Windows会弹出“正在关闭某程序”的对话框;如果WM_QueryEndSession消息的返回值是0,则Windows会忽略,仍然发送WM_EndSession消息,甚至直接用NTTerminateProcess函数强制结束进程,以让Windows按照用户的请求关闭计算机。
 
也就是说,在XP下无法“禁止关机”了,是吗?
 
这种方法对于强制关机消息无效
 
你用上面的过程试试看,在XP下确实有禁止关机的效果,只是有时在使用时会发生异常重启的现象,但不能说它无效,也没有出现“正在关闭某程序”的对话框,至少在XP专业版式中测试是这样的。
 
程序权限问题吧?
 
我说的没错啊!确实对于强制关机消息无效,如果从开始菜单关机,可能是你设置系统为强制关机或者修改了注册表
 
2000下可不可以?
 
一样的内核!
 

Similar threads

后退
顶部