Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
8-1074444671
Хой
2004-01-18 19:51
2004.04.25
Рендеринг на рабочем столе (OpenGL)


1-1081543614
Lelik_R
2004-04-10 00:46
2004.04.25
Опять макросы


1-1081515243
LeShick
2004-04-09 16:54
2004.04.25
Скопировать вчерашний файл


14-1080933735
Феликс
2004-04-02 23:22
2004.04.25
Траектория минометного снаряда?


1-1081350822
BlackLord2003
2004-04-07 19:13
2004.04.25
Код символа!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский