请问:要如何在窗体上加一个按钮,实现关闭计算机!在线等
解决方案 »
- 短信猫的初始化问题
- 数据库现更新如何写,语句错误。
- DBGrid中的AQOQuery,里面的select语句是两个关联的表,delete的时候是不是把两个表的记录都删除了?
- 多线程管理任务问题!急救啊!!!!
- 请问怎么才能不显示数据库登陆前对话框??
- ====请问如何做出象Excel中的单元格计算公式一样的效果。====在线等
- 我没有作过帮助文档,但现在接手别人的一个项目需要该这个文档,该文档是chm帮助文件,请问如何改,怎么使用HTML Help Workshop进行修改
- 有什么办法可以实现,对一个已经打开的页面实现自动的将文件保存下来
- 请问各位。如何在DELPHI中用VBA的方法来控制POWERPOINT。
- delphi里clientsocket控件的问题!急!急!急!
- delphi TImage控件加入15位BMP后DELPHI退出
- 如何解决找不到系统的指定路径问题
控制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);///////////////////////////////////////////
Function ShutDownWindows(Flags: Byte) : Boolean;
begin
Result := ExitWindowsEx(Flage, 0)
// 如果成功返回 True.
end;Flags可用参数:EWX_LOGOFF:
(=0)
安全地关闭所有进程,并关闭用户登录。EWX_SHUTDOWN:
(=1)
关闭系统。所有缓冲区的内容都能被安全的存盘,所有进程都将被停止。
对于Windows NT: 必须有 SE_SHUTDOWN_NAME 的安全特权方可进行此项操作。
对于Windows 95: 不必有任何特权。EWX_REBOOT:
(=2)
关闭并重新启动系统。
对于Windows NT: 必须有 SE_SHUTDOWN_NAME 的安全特权方可进行此项操作。
对于Windows 95: 不必有任何特权。EWX_FORCE:
(=4)
强制切断连接,关闭所有应用程序。当使用这个参数时,Windows 将不向正在运行的应用程序发送 WM_QUERYENDSESSION 和 WM_ENDSESSION 消息,有可能造成数据丢失。所以推荐只在紧急时使用这个参数。EWX_POWEROFF:
(=8)
关闭系统并切断电源,需要ATX电源支持。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure ShutDownSystem;
var
hProcess, hAccessToken: THandle;
LUID_AND_ATTRIBUTES: TLUIDAndAttributes;
TOKEN_PRIVILEGES: TTokenPrivileges;
BufferIsNull: DWord;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
//VER_PLATFORM_WIN32s = 0;
//VER_PLATFORM_WIN32_WINDOWS = 1;
//VER_PLATFORM_WIN32_NT = 2;
if Win32PlatForm = VER_PLATFORM_WIN32_NT then
begin //WindowsNT
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);
end;
ExitWindowsEx(EWX_POWEROFF, 0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShutDownSystem;
end;end.