怎样在delphi中用命令控制计算机的重起和关机?

skywind 2003-08-18 05:42:57
怎样在delphi中用命令控制计算机的重起和关机?
...全文
196 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xgy88 2003-08-18
  • 打赏
  • 举报
回复
先提高进程的优先级在调用API关机涵数(WIN2000),WIN98下就直接用关机涵数就行了!
boynicky 2003-08-18
  • 打赏
  • 举报
回复
调用api函数,如上面各位所写!
fengyvn 2003-08-18
  • 打赏
  • 举报
回复
这段代码是别人的.
我只是转贴,非敢掠美.
fengyvn 2003-08-18
  • 打赏
  • 举报
回复
98下用EXWINDOWSEX()
2000下麻烦一些了.
unit main;

interface

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

type
TForm1 = class(TForm)
EdtRomateName: TEdit;
BtnShutDown: TButton;
procedure BtnShutDownClick(Sender: TObject);
private
{ Private declarations }
function EnablePrivilege(lpSystemName:PChar; lpName:PChar):Bool;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

function TForm1.EnablePrivilege(lpSystemName, lpName: PChar): Bool;
var
hToken : THANDLE;
fOk : Bool;
fTest : Bool;
tp, tpNew : TOKEN_PRIVILEGES;
ReturnLength : Cardinal;
begin
fOk := FALSE;
if OpenProcessToken(GetCurrentProcess,(TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY),hToken) then
begin
tp.PrivilegeCount := 1;
if not (LookupPrivilegeValue(lpSystemName,lpName,tp.Privileges[0].Luid)) then
ShowMessage('Can not lookup privilege value!');
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if not (AdjustTokenPrivileges(hToken,FALSE,tp,sizeof(tp),tpNew,ReturnLength)) then
ShowMessage('Can not adjust privilege value.');
if GetLastError = ERROR_SUCCESS then
fOk := TRUE
else
fOK := FALSE;
CloseHandle(hToken);
end;
Result := fOk;
end;

procedure TForm1.BtnShutDownClick(Sender: TObject);
var
RemoteShutDown : Bool;
ComputerName : PChar;

begin
if EdtRomateName.Text <> '' then
begin
ComputerName := PChar(EdtRomateName.Text;
EnablePrivilege(ComputerName,'SeRemoteShutdownPrivilege');
{此句EnablePrivilege(nil,'SeShutdownPrivilege');
下一句改为RemoteShutDown :=InitiateSystemShutdown(nil,nil,0,TRUE,FALSE);将实现本地关机}
RemoteShutDown :=InitiateSystemShutdown(ComputerName ,nil,0,TRUE,FALSE);
{将InitiateSystemShutdown函数的最后一个参数改为TRUE将实现restart}
if RemoteShutDown then
ShowMessage('(远程)关机成功!')
else
ShowMessage('(远程)关机失败!');
end;
end;

end.
firetoucher 2003-08-18
  • 打赏
  • 举报
回复
参见msdn
BOOL ExitWindowsEx(
UINT uFlags, // shutdown operation
DWORD dwReason // shutdown reason
);
uFlags取值:
关机 EWX_POWEROFF
关闭windows EWX_SHUTDOWN
重启:EWX_REBOOT
luo1105 2003-08-18
  • 打赏
  • 举报
回复
去下啊!
outer2000 2003-08-18
  • 打赏
  • 举报
回复
搜索一下吧,非常多了

5,386

社区成员

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

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