如何实现待机,休眠和关机?

asdasdasdww 2010-08-28 10:26:55
新手,请分段说明,最好能留个qq,方便请教,拜个师~~~~~
分别是待机如何实现,休眠如何实现.
最重要是关机~~.
...全文
143 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
daidai_____DD 2010-08-28
  • 打赏
  • 举报
回复
unit Unit1;

interface

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

type
TfrmMain = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.Button1Click(Sender: TObject);
var
currToken:THandle;
prevState,newState:TTokenPrivileges;
prevStateLen:DWORD;
uid:TLargeInteger;
begin
// Set the privledges so we CAN reboot...
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, currToken);
LookupPrivilegeValue(nil, 'SeShutdownPrivilege',uid);
newState.PrivilegeCount:=1;
newState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
newState.Privileges[0].Luid := uid;
AdjustTokenPrivileges(currToken, False, newState, sizeof(TTokenPrivileges),prevState, prevStateLen);
// Go ahead and reboot...
ExitWindowsEX(EWX_POWEROFF or EWX_FORCE, 0);
close;
end;


procedure TfrmMain.Button2Click(Sender: TObject);
var
currToken:THandle;
prevState,newState:TTokenPrivileges;
prevStateLen:DWORD;
uid:TLargeInteger;
begin
// Set the privledges so we CAN reboot...
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, currToken);
LookupPrivilegeValue(nil, 'SeShutdownPrivilege',uid);
newState.PrivilegeCount:=1;
newState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
newState.Privileges[0].Luid := uid;
AdjustTokenPrivileges(currToken, False, newState, sizeof(TTokenPrivileges),prevState, prevStateLen);
// Go ahead and reboot...
SetSystemPowerState(TRUE,TRUE);//
//ExitWindowsEX(EWX_POWEROFF|EWX_FORCE, 0);
close;
end;

procedure TfrmMain.Button3Click(Sender: TObject);
var
currToken:THandle;
prevState,newState:TTokenPrivileges;
prevStateLen:DWORD;
uid:TLargeInteger;
begin
// Set the privledges so we CAN reboot...
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, currToken);
LookupPrivilegeValue(nil, 'SeShutdownPrivilege',uid);
newState.PrivilegeCount:=1;
newState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
newState.Privileges[0].Luid := uid;
AdjustTokenPrivileges(currToken, False, newState, sizeof(TTokenPrivileges),prevState, prevStateLen);
// Go ahead and reboot...
SetSystemPowerState(FALSE,TRUE);
//ExitWindowsEX(EWX_POWEROFF, 0);
close;
end;
procedure TfrmMain.Button4Click(Sender: TObject);
var
currToken:THandle;
prevState,newState:TTokenPrivileges;
prevStateLen:DWORD;
uid:TLargeInteger;
begin
// Set the privledges so we CAN reboot...
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, currToken);
LookupPrivilegeValue(nil, 'SeShutdownPrivilege',uid);
newState.PrivilegeCount:=1;
newState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
newState.Privileges[0].Luid := uid;
AdjustTokenPrivileges(currToken, False, newState, sizeof(TTokenPrivileges),prevState, prevStateLen);
// Go ahead and reboot...
ExitWindowsEX(EWX_REBOOT or EWX_FORCE, 0);
close;
end;

procedure TfrmMain.Button5Click(Sender: TObject);
var
currToken:THandle;
prevState,newState:TTokenPrivileges;
prevStateLen:DWORD;
uid:TLargeInteger;
begin
// Set the privledges so we CAN reboot...
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, currToken);
LookupPrivilegeValue(nil, 'SeShutdownPrivilege',uid);
newState.PrivilegeCount:=1;
newState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
newState.Privileges[0].Luid := uid;
AdjustTokenPrivileges(currToken, False, newState, sizeof(TTokenPrivileges),prevState, prevStateLen);
// Go ahead and reboot...
ExitWindowsEX(EWX_LOGOFF or EWX_FORCE, 0);
close;
end;

end.
F_ish 2010-08-28
  • 打赏
  • 举报
回复
来学习!
gyk120 2010-08-28
  • 打赏
  • 举报
回复
关机你可以直接调用ExitWindowEx
http://msdn.microsoft.com/en-us/library/aa376868(VS.85).aspx
hsmserver 2010-08-28
  • 打赏
  • 举报
回复
ExitWindowsEx(EWX_LOGOFF,0); //以其他用户身份登录
ExitWindowsEx(EWX_SHUTDOWN,1); //安全关机
ExitWindowsEx(EWX_REBOOT,2); //重新启动计算机
ExitWindowsEx(EWX_FORCE,4); //强行关机
ExitWindowsEx(EWX_POWEROFF,8); //关闭系统并关闭电源
待机休眠的区别 1、待机”电源管理模式 待机模式主要用于节电,该功能使你可不需重新启动计算机就可返回工作状态。待机模式可关闭监视器和硬盘、风扇之类设备,使整个系统处于低能耗状态。在你重新使用计算机时,它会迅速退出待机模式,而且桌面(包括打开的文档和程序)精确恢复到进入等待时的状态。 如要解除等待状态并重新使用计算机,可移动一下鼠标或按键盘上的任意键,或快速按一下计算机上的电源按钮即可。 请注意!与下面所述的“休眠模式”不同,待机模式不在硬盘上存储未保存的信息,这些信息仅仅只存储在计算机内存中。如果期间突然断电,这些信息将丢失。因此,在将计算机置于待机模式前应该保存文件。如果你希望在离开计算机时自动保存所做的工作,可使用休眠模式而非待机模式。但是,休眠模式将关闭计算机。 2.“休眠” 电源管理模式 在使用休眠模式时,你可以关掉计算机,并确信在回来时所有工作(包括没来得及保存或关闭的程序和文档)都会完全精确地还原到离开时的状态。内存中的内容会保存在磁盘上,监视器和硬盘会关闭,同时也节省了电能,降低了计算机的损耗。一般来说,使计算机解除休眠状态所需的时间要比解除等待状态所需的时间要长,但休眠状态消耗的电能更少。 如果你工作时经常被打断,如某些秘书职业,往往一边要进行计算机处理一边还得接听电话等等,你就可以考虑将计算机设置为经过指定多少分钟后进入自动休眠模式。休眠模式会将内存中的所有内容保存到硬盘,关闭监视器和硬盘,然后关闭计算机。 应用网络切换

1,183

社区成员

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

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