Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
ВнизКак программно перегрузить компьютер? Найти похожие ветки
← →
Ната (2005-01-21 07:52) [0]ПОдскажите, пожалуйста, как программно перегрузить компьютер?
← →
Квэнди © (2005-01-21 09:04) [1]а поискать в этом же форуме саавсем лень?
← →
onyx © (2005-01-21 11:52) [2]Вот готовое решение. А то здесь трудно найти, то что нужно.
function WinExit : boolean;
var ver : OSVERSIONINFO;
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
ver.dwOSVersionInfoSize:=SizeOf(ver);
GetVersionEx(ver);
if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
begin
if SetPrivilege("SeShutdownPrivilege", true) then
begin
Form1.Close;
ExitWindowsEx(EWX_POWEROFF or EWX_FORCE, 0);
end
else
begin
Form1.Close;
MessageBox(Form1.Handle, "К сожалению перезагрузка не получилась!","info",MB_OK or MB_ICONWARNING or MB_SYSTEMMODAL);
end;
end
else
begin
Form1.Close;
ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0);
end;
END;
← →
VMcL © (2005-01-21 16:50) [3]>Form1.Close;
>MessageBox(Form1.Handle...);
За такой код расстреливать надо.
← →
Вариант © (2005-01-22 18:29) [4]Такой способ не убивает процессы:
procedure reboot;
var
hToken: THandle;
tkp: _TOKEN_PRIVILEGES;
DUMMY: PTokenPrivileges;
DummyRL: Cardinal;
begin
DUMMY := nil;
if not OpenProcessToken(
GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
hToken
) then
raise TShutdownEx.Create("OpenProcessToken failed");
if (not LookupPrivilegeValue(nil, "SeShutdownPrivilege",
tkp.Privileges[0].Luid)) then
raise TShutdownEx.Create("LookupPrivilegeValue failed");
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := $0002; //SE_PRIVILEGE_ENABLED = $00002
AdjustTokenPrivileges(hToken, FALSE, tkp, 0, Dummy, DummyRL);
if (GetLastError() <> ERROR_SUCCESS) then
raise TShutdownEx.Create("AdjustTokenPrivileges failed");
if (not ExitWindowsEx(EWX_REBOOT, 0)) then
raise TShutdownEx.Create("ExitWindowsEx failed");
end;
← →
Dextor (2005-01-22 20:30) [5]Проще полистать FAQ на этом сайте, там как раз все написанно !
← →
grom (2005-01-22 20:42) [6]XP
...
procedure ...
var
hToken: THandle;
tkp: _TOKEN_PRIVILEGES;
returnLength: Cardinal;
begin
// Windows.Beep(855,55);
if OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken)then
begin
LookupPrivilegeValue(nil,"SeShutdownPrivilege",tkp.Privileges[0].Luid);
tkp.PrivilegeCount:=1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
if AdjustTokenPrivileges(hToken,false,tkp,0,nil,returnLength)then ExitWindowsEx(EWX_SHUTDOWN or EWX_REBOOT,0);
end;
end;
← →
i-s-v © (2005-01-23 01:35) [7]Полазь на http://delphiworld.narod.ru
---
The Death Will Come
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.046 c