请问各位大侠,如何在DELPHI 6中用函数实现WIN2000 的重新启动????,在线急等!!1

bigbrid 2004-11-30 03:36:22
请问各位大侠,如何在DELPHI 6中用函数实现WIN2000 的重新启动????,在线急等!!1

...全文
109 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ly_liuyang 2004-12-03
  • 打赏
  • 举报
回复
注意权限即可

http://lysoft.7u7.net
zijida 2004-12-03
  • 打赏
  • 举报
回复
个人认为 比较ExitWindowsEx,InitiateSystemShutdownEx()来得更狠一些...
嘿嘿.....
zijida 2004-12-03
  • 打赏
  • 举报
回复
楼上说的不完整,还需要进行token权限设置的,否则为什么楼主要强调win2000呢?

奉上代码一份:
procedure TForm1.Button1Click(Sender: TObject);
var tk:TTokenPrivileges;
hToken: THandle;
h: Dword;

begin
tk.PrivilegeCount:=1;
tk.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, tk.Privileges[0].luid);
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken);
AdjustTokenPrivileges(hToken, False, tk, 0, PTokenPrivileges(nil)^, h);

ExitWindowsEx(0, 0)
// 参数型及说明: uFlags Long,指定下述一个或多个标志(用OR运算符合并到一起)
// EWX_FORCE 强迫中止没有响应的进程 4
// EWX_LOGOFF 中止进程,然后注销 0
// EWX_SHUTDOWN 关掉系统电源(如果可能的话,ATX电源就可以) 1
// EWX_REBOOT 重新引导系统 2
// EWX_SHUTDOWN 关闭系统 1
// dwReserved Long,保留,设为零

CloseHandle(hToken);
end;


呵呵,借楼上的一点儿光,楼上的,莫要见怪。
mastersky 2004-12-03
  • 打赏
  • 举报
回复
这里有几个小函数可能用得到:
http://www.playicq.com/dispdocnew.php?id=20738

{关闭计算机}
function WinExit (iFlags: integer) : Boolean;
{0:注销
1:关闭计算机
2:重新启动计算机
4:强制注销(不保存状态)
8:关闭电源
16:注销}

function SetPrivilege (sPrivilegeName: string; bEnabled: Boolean) : Boolean;
var
TPPrev,TP: TTokenPrivileges;
Token : THandle;
dwRetLen : DWORD;
begin
result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token);
TP.PrivilegeCount := 1;
if LookupPrivilegeValue (nil, PChar (sPrivilegeName), TP.Privileges[0].LUID) then
begin
if bEnabled then TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else TP.Privileges[0].Attributes := 0;
dwRetLen := 0;
result := AdjustTokenPrivileges(Token, False, TP, SizeOf (TPPrev), TPPrev,dwRetLen);
end;
CloseHandle(Token);
end;

begin
Result:=False;
if SetPrivilege ('SeShutdownPrivilege', true) then
begin
if ExitWindowsEx(iFlags, 0) then result:=True;
SetPrivilege ('SeShutdownPrivilege', False);
end
end;

「已注销」 2004-12-03
  • 打赏
  • 举报
回复
转的
调用:WinExit(EWX_REBOOT or EWX_FORCE);

function WinExit(flags: integer): boolean;stdcall;//关闭计算机函数;
function SetPrivilege(privilegeName: string; enable: boolean): boolean;
var tpPrev,
tp : TTokenPrivileges;
token : THandle;
dwRetLen : DWord;
begin
result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);
tp.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID) then
begin
if enable then
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
tp.Privileges[0].Attributes := 0;
dwRetLen := 0;
result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);
end;
CloseHandle(token);
end;
begin
if SetPrivilege('SeShutdownPrivilege', true) then begin
ExitWindowsEx(flags, 0);
SetPrivilege('SeShutdownPrivilege', False)
end;
end;
WorldMobile 2004-11-30
  • 打赏
  • 举报
回复
ExitWindowsEx(0, 0)
// 参数型及说明: uFlags Long,指定下述一个或多个标志(用OR运算符合并到一起)
// EWX_FORCE 强迫中止没有响应的进程 4
// EWX_LOGOFF 中止进程,然后注销 0
// EWX_SHUTDOWN 关掉系统电源(如果可能的话,ATX电源就可以) 1
// EWX_REBOOT 重新引导系统 2
// EWX_SHUTDOWN 关闭系统 1
// dwReserved Long,保留,设为零
  • 打赏
  • 举报
回复
可能要用API吧。

1,184

社区成员

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

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