为什么关机只能到“你可以安全关机了”

500czj 2003-05-23 10:23:01
我写了一段关机代码,2K的,可以关机,但为什么只能到“你可以安全关机了”的画面,不能关闭电源,这不是还要我手动关机,我的电脑已被我设置成自动关闭电源了。
...全文
726 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
DelphiIdiot 2003-07-29
  • 打赏
  • 举报
回复
既然能关到“你可以安全关机了”说明权限没问题了,就是一个参数的问题:or EWX_PowerOff;
真不知道要吵到什么时间~~~~~~~~~
cumtyangjin 2003-07-29
  • 打赏
  • 举报
回复
你那边其实就是参数设置不妥而已,把EWX_SHUTDOWN改为EWX_POWEROFF就可以了,
WIN98下面EWX_SHUTDOWN就可以了。
cumtyangjin 2003-07-29
  • 打赏
  • 举报
回复
给你一个参考
procedure TKStatus.ShutDown;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
var
hToken:THandle;
tkp:TTokenPrivileges;
tkpo:TTokenPrivileges;
zero:DWORD;
begin
if Pos('Windows NT',GetWinVersion) = 1 then
begin
zero := 0;
if not OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken) then
begin
Exit;
end;
if not LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid) then
begin
Exit;
end;
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,False,tkp,SizeOf(TTokenPrivileges),tkpo,zero);
if Boolean(GetLastError()) then
begin
Exit;
end
else
ExitWindowsEx(EWX_FORCE or EWX_POWEROFF,0); //ExitWindowsEx(EWX_SHUTDOWN,0); //
end
else
begin
ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN,0); //ExitWindowsEx(EWX_SHUTDOWN,0); //
end;
end;
zhrmghg11 2003-07-29
  • 打赏
  • 举报
回复
代码没有问题。用EWX_SHUTDOWN&EWX_POWEROFF 两个参数。
我的机子一个就可以搞定了。
CloneCenter 2003-07-29
  • 打赏
  • 举报
回复
就是 EWX_PowerOff 的问题。
myboor 2003-07-29
  • 打赏
  • 举报
回复
cloudtarget 2003-07-29
  • 打赏
  • 举报
回复
启用高级电源管理
chenjunccnu 2003-07-29
  • 打赏
  • 举报
回复
首先要提升权限

procedure _AdjustPrivileges();
var hdlTokenHandle:Cardinal;tmpLuid:TLargeInteger;tkp:TOKEN_PRIVILEGES;lBufferNeeded:Cardinal;
tkpNewButIgnored:TTokenPrivileges;
begin
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hdlTokenHandle);
LookupPrivilegeValue('','SeShutdownPrivilege',tmpLuid); tkp.PrivilegeCount :=1;
tkp.Privileges[0].Luid :=tmpLuid;
tkp.Privileges[0].Attributes :=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hdlTokenHandle,false,tkp,Sizeof(tkpNewButIgnored),tkpNewButIgnored,lBufferNeeded);end;

DelphiIdiot 2003-07-27
  • 打赏
  • 举报
回复
我上面所说的在Win2K下试过,没有问题;我以前也碰到过这个问题,但参数设置正确后就没问题了!
yuxin821209 2003-07-27
  • 打赏
  • 举报
回复
请换个系统试试.
itfly 2003-07-12
  • 打赏
  • 举报
回复
看看电源管理!
chinawzg 2003-07-12
  • 打赏
  • 举报
回复
电源管理的设置问题
Behard 2003-07-11
  • 打赏
  • 举报
回复
写错了
ewx_poweroff or ewx_shutdown

-----------------------------------
现在混水园了!
Behard 2003-07-10
  • 打赏
  • 举报
回复
在 NT 中要 ewx_poweroff 与 ewx_shurdown 常数同时使用
而在 9x 中只要 ewx_shurdown 即可

-----------------------------------
现在混水园了!
jpyc 2003-06-23
  • 打赏
  • 举报
回复
楼上验证了没有?我的怎么不行啊?
OO_is_just_P 2003-06-20
  • 打赏
  • 举报
回复
CMOS AND POWER MANAGER
smilycella 2003-06-20
  • 打赏
  • 举报
回复

用我上面的代码肯定行。你们就不会用我的函数试试吗? 笨蛋!
DelphiIdiot 2003-06-20
  • 打赏
  • 举报
回复
最主要的问题是大家使用函数Exitwindowsex时都用了如下参数ewx_shurdown,而没用ewx_poweroff ,前面只有两位老兄注意到了这一点:firetoucher(蹈火者) 和smilycella(士多啤梨);建议大家碰到类似的问题多查一下MSDN,可以查到这个问题的!!!!
另外:
1 电源至少必须是atx标准
2 CMOS设置支持
3 用Exitwindowsex(ewx_poweroff or ewx_shurdown,0)

可以结贴了,希望能对搂主有所帮助!
myfine 2003-06-19
  • 打赏
  • 举报
回复
应该是主板不支持的问题
smilycella 2003-06-19
  • 打赏
  • 举报
回复
以下函数,2000测试没有任何问题!

function TFrmMain.ShutDownSystem(si:integer):BOOL;
var
hProcess,hAccessToken:THandle;
LUID_AND_ATTRIBUTES:TLUIDAndAttributes;
TOKEN_PRIVILEGES: TTokenPrivileges;
BufferIsNull:DWORD;
Const
SE_SHUTDOWN_NAME='SeShutdownPrivilege';
begin
hProcess:=GetCurrentProcess();

OpenProcessToken(hprocess,TOKEN_ADJUST_PRIVILEGES+TOKEN_QUERY,hAccessToken);
LookupPrivilegeValue(Nil,SE_SHUTDOWN_NAME,LUID_AND_ATTRIBUTES.Luid);
LUID_AND_ATTRIBUTES.Attributes:=SE_PRIVILEGE_ENABLED;
TOKEN_PRIVILEGES.PrivilegeCount:=1;
TOKEN_PRIVILEGES.Privileges[0]:=LUID_AND_ATTRIBUTES;
BufferIsNull:=0;

AdjustTokenPrivileges(hAccessToken,False,TOKEN_PRIVILEGES,sizeof(TOKEN_PRIVILEGES),Nil,BufferIsNull);
case si of
1:
ExitWindowsEx(EWX_REBOOT, 0); //重启
2:
ExitWindowsEx(EWX_POWEROFF, 0); //关机
end;
ShutDownSystem:=True;
end;
加载更多回复(19)

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧