Форум: "WinAPI";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизExitWindowsEx(... Найти похожие ветки
← →
Коля (2003-12-30 11:41) [0]Мне нужна функция выключения компьютера под Win2000
В Win98 была ф. ExitWindows(EWX_POWEROFF, 0 );
но она лишь перезагружала. Есть также:
ExitWindowsEx(EWX_REBOOT,0);
ExitWindowsEx(EWX_POWEROFF,0);
но там нужны привелегии для Win2000.
А вообще мне это нужно, т.к. на серваке (который под Win2000) монитор сел совсем и я хочу написать прогу, выключающую его с другого (рабочего) компа локальной сети. Может уже есть готовые программы или процедура. Подскажите пожалуйста..
← →
Rik (2003-12-30 13:37) [1]AdjustTokenPrivileges?
← →
Dimman1 © (2003-12-30 13:40) [2]procedure TForm1.Shutdown;
var ph:THandle;
tp,prevst:TTokenPrivileges;
rl:DWORD;
begin
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,ph);
LookupPrivilegeValue(Nil,"SeShutdownPrivilege",tp.Privileges[0].Luid);
tp.PrivilegeCount:=1;
tp.Privileges[0].Attributes:=2;
AdjustTokenPrivileges(ph,FALSE,tp,SizeOf(prevst),prevst,rl);
ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF or EWX_FORCE,0);
end;
← →
Коля (2003-12-30 13:43) [3]Я тут покопался ещё в интернете и нашёл модуль:
unit shutdown;
interface
procedure ForceShutdownNT;
procedure ForceRebootNT;
procedure ForcePowerOffNT;
implementation
uses windows;
procedure error(msg : string);
begin
MessageBox(0, @msg[1], "Error", MB_ICONERROR or MB_OK);
end;
function GetShutdownPriv : boolean;
var
hToken : THandle;
tkp : TTokenPrivileges;
ReturnLength : DWORD;
begin
// Get a token for this process.
if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then begin
error("OpenProcessToken");
Result := false;
exit;
end;
// Get the LUID for the shutdown privilege.
LookupPrivilegeValue(nil, "SeShutdownPrivilege", tkp.Privileges[0].Luid);
tkp.PrivilegeCount := 1; // one privilege to set
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
AdjustTokenPrivileges(hToken, FALSE, tkp, 0, nil, ReturnLength);
// Cannot test the return value of AdjustTokenPrivileges.
if (GetLastError <> ERROR_SUCCESS) then begin
error("AdjustTokenPrivileges");
Result := false;
exit;
end;
Result := true;
end;
procedure ForceShutdownNT;
begin
if GetShutdownPriv then
if (ExitWindowsEx(EWX_LOGOFF or EWX_FORCE, 0)) then error("ExitWindowsEx");
end;
procedure ForcePowerOffNT;
begin
if GetShutdownPriv then
if (ExitWindowsEx(EWX_POWEROFF or EWX_FORCE, 0)) then error("ExitWindowsEx");
end;
procedure ForceRebootNT;
begin
if GetShutdownPriv then
if (ExitWindowsEx(EWX_REBOOT or EWX_FORCE, 0)) then error("ExitWindowsEx");
end;
end.
← →
YuRock © (2003-12-30 13:45) [4]> [2]
Да, но при чем здесь сервак? Ты же свой комп выключишь! Хотя, конечно, можно запустить эту прогу на удаленной машине.
← →
YuRock © (2003-12-30 13:54) [5]А вообще это делается так, как в [2], но вместо ExitWindowsEx() - InitiateSystemShutdown(), в которой первым параметром должно быть сетевое имя компа. Работает только на NT/2K/XP, причем если ты подлогинился к выключаемому компу с правами админа.
← →
BestDen (2004-02-09 23:28) [6]Вставил я от [2] код, мой компилятор показывает следующую ошибку:
[Error] offer.pas(51): Ambiguous overloaded call to "AdjustTokenPrivileges"
Помогите решить проблемку... :)
← →
DarkForest (2004-02-17 00:37) [7]Попробуй написать:
AdjustTokenPrivileges(ph,FALSE,tp,0,nil,rl);
В MSDN нарисовано так в примере кода выключения системы под WinXP.
← →
Костя (2004-02-21 09:41) [8]Люди, вы не знаете что в XP вырубает комп,т.к. ExitWindowsEx что-то не работает...
← →
DeadMeat © (2004-02-22 19:26) [9]
> [8] Костя (21.02.04 09:41)
Нормально... Ты вообще читал что сверху написано...??
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.039 c