如何实现程序关机?

greencoding 2002-07-24 12:21:13
RT
...全文
86 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ehom 2002-07-24
  • 打赏
  • 举报
回复
注意,NT和98下使用的区别!
ehom 2002-07-24
  • 打赏
  • 举报
回复
ExitWindowsEx(EWX_LOGOFF,0) //以其他用户身份登录
ExitWindowsEx(EWX_SHUTDOWN,1) //安全关机
ExitWindowsEx(EWX_REBOOT,2) //重新启动计算机
ExitWindowsEx(EWX_FORCE,4) //强行关机
ExitWindowsEx(EWX_POWEROFF,8); //关闭系统并关闭电源
westfly 2002-07-24
  • 打赏
  • 举报
回复
// 以下代码用于windowsNT/2000

procedure TraceError; // 报告错误消息
var lpMsgBuf: PChar;
var ErrorID: DWORD;
begin
ErrorID := GetLastError;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS,
nil,
ErrorID,
0, // Default language
@lpMsgBuf,
0,
nil
);
ShowMessage(IntToStr(ErrorID) + ':' + String(lpMsgBuf));
LocalFree(Cardinal(lpMsgBuf));
end;

function Prepare(MachineName: PChar): Boolean; // 调整权限
var
App: THANDLE;
Num: DWORD;
Tok: TOKEN_PRIVILEGES;
begin
Result := False;
//ShowMessage('OpenProcessToken...');
if not OpenProcessToken(
GetCurrentProcess,
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
App
) then
TraceError
else
begin
Tok.PrivilegeCount := 1;
//ShowMessage('LookupPrivilegeValue...');
if LookupPrivilegeValue(MachineName, 'SeShutdownPrivilege', Tok.Privileges[0].Luid) then
begin
Tok.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
//ShowMessage('AdjustTokenPrivileges...');
if not AdjustTokenPrivileges(App, False, Tok, SizeOf(Tok), Tok, Num) then
TraceError
else
Result := True;
end
else
TraceError;
end;
CloseHandle(App);
end;

function ShutdownWindows: Boolean; // 关机
begin
Result := Prepare(nil) and ExitWindowsEx(EWX_SHUTDOWN, 0);
end;
masterdelphi 2002-07-24
  • 打赏
  • 举报
回复
Flage:
EWX_FORCE=4; //关闭所有程序并以其他用户身份登录
EWX_LOGOFF=0; //重新启动计算机并切换到MS-DOS方式
EWX_REBOOT=2; //重新启动计算机
EWX_SHUTDOWN=1;//关闭计算机
masterdelphi 2002-07-24
  • 打赏
  • 举报
回复
Function ShutDownWindows(Flags: Byte) : Boolean;
begin
Result := ExitWindowsEx(Flage, 0)
// 如果成功返回 True.
end;
wjlsmail 2002-07-24
  • 打赏
  • 举报
回复
有收获:)
jackie168 2002-07-24
  • 打赏
  • 举报
回复
控制WINDOWS的开关:如关闭WINDOWS,重新启动WINDOWS等,ExitWindowsEx(UINT uFlags,DWORD dwReserved);是实现这一功能的API函数。

首先定义常数

const

EWX_FORCE=4;

//关闭所有程序并以其他用户身份登录

EWX_LOGOFF=0;

//重新启动计算机并切换到MS-DOS方式

EWX_REBOOT=2;

//重新启动计算机

EWX_SHUTDOWN=1;

//关闭计算机

运行时给How赋值,让他等于EWX_SHUTDOWN或其他,调用以下语句:

ExitWindowsEx(How,0);

就可以达到目的。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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