DELPHI实现关机,兼容全部WINDOWS系统 转

{=======================================================================================================================
关闭Windows函数ExitWindowsEx(UINT uFlag,DWORD:dwReserved)说明:

控制WINDOWS的开关:如关闭WINDOWS,重新启动WINDOWS等, ExitWindowsEx(UINT uFlags,DWORD dwReserved);是实现这一功能的API函数。如果Complile时提示EWX_XXXX未定义,那么请手动定义这几个常数,默认情况下是无需我们手动定义的。
const
EWX_FORCE=4; //关闭所有程序并以其他用户身份登录?(!!应为“强制执行否”吧!!)
EWX_LOGOFF=0; //重新启动计算机并切换到MS-DOS方式
EWX_REBOOT=2; //重新启动计算机
EWX_SHUTDOWN=1;//关闭计算机
EWX_POWEROFF=8;//切断电源
EWX_FORCEIFHUNG=$10;//不记得了,有谁好心查下MSDN
调用方法:
ExitWindowsEx(EWX_REBOOT,0); //重启计算机
ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN,0); //强行关机
不过博主经常听到有人说这一API只在Windows 95/98/98SE/Me下有效,而在Windows NT/2000/XP下无效。
其实这是不正确的,这一API在上述平台下均是有效的,只是我们在Windows NT/2000/XP平台下执行此函数之前,必须要获取得关机特权罢了,其实就算是Windows NT/2000/XP系统自身关机也必须要走这一流程的。
view plainprint?
获取关机特权函数如下:
procedure Get_Shutdown_Privilege; //获得用户关机特权,仅对Windows NT/2000/XP
var
rl: Cardinal;
hToken: Cardinal;
tkp: TOKEN_PRIVILEGES;
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
if LookupPrivilegeValue(nil, ‘SeShutdownPrivilege‘, tkp.Privileges[0].Luid) then
begin
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount := 1;
AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
end;
end;

另一个关机API,InitiateSystemShutdown(PChar(Computer_Name),PChar(Hint_Msg),Time,Force,Reboot);在Windows NT/2000/XP平台下还会自动调用系统本身的关机提示窗口。
InitiateSystemShutdown(PChar(Computer_Name), PChar(Hint_Msg),Time,Force,Reboot);
//关机计算机名,关机提示信息,停留时长,是否强行关机,是否要重启
当我们把Computer_Name设为nil时,默认为本机,如 InitiateSystemshutdown(nil,nil,0,True,False);//强行关机

由于我们需要制作一个通用的关机程序,故要对当前的操作系统进行判断,这个比较简单,函数如下:
function GetOperatingSystem: string;//获取操作系统信息
var osVerInfo: TOSVersionInfo;
begin
Result :=‘‘;
osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(osVerInfo) then
case osVerInfo.dwPlatformId of
VER_PLATFORM_WIN32_NT:
begin
Result := ‘Windows NT/2000/XP‘
end;
VER_PLATFORM_WIN32_WINDOWS:
begin
Result := ‘Windows 95/98/98SE/Me‘;
end;
end;
end;

执行关机的主函数:
procedure ShutDownComputer;
begin
if GetOperatingSystem=‘Windows NT/2000/XP‘ then
begin
Get_Shutdown_Privilege;
//调用此函数会出现系统关机提示窗口,并允许用户取消关机动作
//InitiateSystemShutDown(nil,‘关机提示:讨厌你所以关了你!‘,0,True,False);
ExitWindowsEx(EWX_SHUTDOWN+EWX_FORCE+EWX_POWEROFF+EWX_FORCEIFHUNG,0);
end else
begin
ExitWindowsEx(EWX_SHUTDOWN+EWX_FORCE+EWX_POWEROFF+EWX_FORCEIFHUNG,0);
end;
end;
=========================================================================================================================}

使用:

procedure TShutDownForm.btn_PowerOffClick(Sender:Object);
begin
ShutDownComputer;
end;

时间: 2024-12-26 07:19:57

DELPHI实现关机,兼容全部WINDOWS系统 转的相关文章

DELPHI实现关机,兼容全部WINDOWS系统

转自:http://blog.sina.com.cn/s/blog_611ab6c50100mznx.html {=======================================================================================================================关闭Windows函数ExitWindowsEx(UINT uFlag,DWORD:dwReserved)说明: 控制WINDOWS的开关:如关闭W

一块移动硬盘怎样兼容Mac和Windows系统,并且可以在time machine上使用

Mac的内存通常不是很大,加上使用Mac的time machine备份的话,是需要外置U盘或硬盘的.U盘存储空间较小,大家也不会去分区,直接拿来用在Mac上或者Windows上就可以了.所以这里只说硬盘.现在的USB接口的移动硬盘白菜价,四五百块钱1T的硬盘是现在最常用的,也是我买的类型.我希望这块硬盘可以用在time machine备份上,也可以在Mac和Windows上读写文件. 上网查了很多,也试了几个方法,网上关于Mac和Windows可共同读写硬盘的讨论很多,大致方法有两种: 1.移动

C#实现控制Windows系统关机、重启和注销的方法:

shutdown命令的参数: shutdown.exe -s:关机shutdown.exe -r:关机并重启shutdown.exe -l:注销当前用户 shutdown.exe -s -t 时间:设置关机倒计时shutdown.exe -h:休眠shutdown.exe -t 时间:设置关机倒计时.默认值是 30 秒.shutdown.exe -a:取消关机shutdown.exe -f:强行关闭应用程序而没有警告shutdown.exe -m \计算机名:控制远程计算机shutdown.ex

C#捕获windows关机事件,在系统关机前做一些自己想做的事

C#捕获windows关机事件,在系统关机前做一些自己想做的事: 有些时候我们可能想在Windows关机时记录或处理一些事情,这里提供几种方法. 方法一: /// <summary> /// 窗口过程的回调函数 /// </summary> /// <param name="m"></param> protected override void WndProc(ref Message m) { switch (m.Msg) { //此消息

Windows系统下制作Android开关机动画

在Windows系统下,做Android开关机动画时,需要注意几个问题: 1.选择压缩时 2.压缩的格式:

C#实现控制Windows系统关机、重启和注销的方法

shutdown.exe -s:关机shutdown.exe -r:关机并重启shutdown.exe -l:注销当前用户 shutdown.exe -s -t 时间:设置关机倒计时shutdown.exe -h:休眠shutdown.exe -t 时间:设置关机倒计时.默认值是 30 秒.shutdown.exe -a:取消关机shutdown.exe -f:强行关闭应用程序而没有警告shutdown.exe -m \计算机名:控制远程计算机shutdown.exe -i:显示"远程关机&qu

C#控制Windows系统关机、重启和注销的代码

如下资料是关于C#控制Windows系统关机.重启和注销的代码. protected void btnShutDown_Click(object sender, EventArgs e) { } protected void btnRestart_Click(object sender, EventArgs e) { } protected void btnLogOff_Click(object sender, EventArgs e) { } 原文地址:https://www.cnblogs.

Delphi - Windows系统下,Delphi调用API函数和7z.dll动态库,自动把文件压缩成.tar.gz格式的文件

项目背景 应欧美客户需求,需要将文件压缩成.tar.gz格式的文件,并上传给客户端SFTP服务器. 你懂的,7-Zip软件的显著特点是文件越大压缩比越高,在Linux系统上相当于我们Windows系统上WinRAR或者好压软件一样的存在. 7-Zip软件下载与安装 网上下载相关安装包并完成安装,找到安装目录,复制7z.dll文件到D盘. .bat文件的制作 通过7-Zip软件使用手册了解到,通过动态命令行调用7z.dll可以把文件压缩成.tar.gz格式的,实际上是先将文件压缩成.tar格式的文

Windows 系统错误代码

0-操作成功完成. 1-函数不正确. 2-系统找不到指定的文件. 3-系统找不到指定的路径. 4-系统无法打开文件. 5-拒绝访问. 6-句柄无效. 7-存储控制块被损坏. 8-存储空间不足,无法处理此命令. 9-存储控制块地址无效. 10-环境不正确. 11-试图加载格式不正确的程序. 12-访问码无效. 13-数据无效. 14-存储空间不足,无法完成此操作. 15-系统找不到指定的驱动器. 16-无法删除目录. 17-系统无法将文件移到不同的磁盘驱动器. 18-没有更多文件. 19-介质受写