Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.20;
Скачать: CL | DM;

Вниз

Опять о выключении компьютера...   Найти похожие ветки 

 
Александр Богданов   (2002-12-05 07:29) [0]

Мне нужно выключить компьютер в нужное время. ОС WinXP корпус ATX. Стандартная команда Shutdown почему-то не выключает питание. В Internete я нашел пример как выключить питание, но
что-то не так с этим примером (пример ниже):
1) компьютер выключается так, будто бы я поставил флаг FORCE, т.е. принудительно завершает работу системы
2) если программа запускается шедулером, то компьютер не выключается

Help читал, но я не силен в WinAPI и тонкостях системы, посмотрите, пожалуйста, что я делаю не так.

program powerdown;
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils;

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;

function WinExit(flags: integer): integer;
begin
SetPrivilege("SeShutdownPrivilege", true);
ExitWindowsEx(flags,0);
Result:=GetLastError();
SetPrivilege("SeShutdownPrivilege",False);
end;

procedure ShowHelp;
begin
writeln("powerdown [/l | /r | /s | /p] [/f]");
writeln;
writeln("/l logoff");
writeln("/r reboot");
writeln("/s shutdown");
writeln("/p powerdown");
writeln("/f force execution");
end;

var
Flags: integer;
begin
if (ParamCount = 0) or (ParamCount > 2)then begin
ShowHelp;
Exit;
end;

Flags:=-1;
if LowerCase(ParamStr(1)) = "/l" then Flags:=EWX_LOGOFF;
if LowerCase(ParamStr(1)) = "/r" then Flags:=EWX_REBOOT;
if LowerCase(ParamStr(1)) = "/s" then Flags:=EWX_SHUTDOWN;
if LowerCase(ParamStr(1)) = "/p" then Flags:=EWX_POWEROFF;

if Flags < 0 then begin
ShowHelp;
Exit;
end;

if ParamCount = 2 then
if LowerCase(ParamStr(2)) = "/f" then
Flags:=Flags + EWX_FORCE
else begin
ShowHelp;
Exit;
end;

writeln("Result of ExitWindowsEx:",WinExit(Flags));
end.


 
Song ©   (2002-12-05 07:33) [1]

У Вас компьютер локальный или в сети?


 
slpro ©   (2002-12-05 08:19) [2]

Вот здесь есть прога www.slpro.nm.ru если получится напишу!


 
Александр Богданов   (2002-12-05 15:10) [3]

>Song
компьютер локальный и все работает пока я залогининый
под админом, т.е. я создал задачу в шедуллере,
задача запускается, компьютер выключается - все как надо.

но если я завершил сеанс админа, то задача запускается,
но компьютер не выключается...


 
Song ©   (2002-12-05 15:51) [4]

Дело в шедулере. Для него задаётся пароль на задачу. И если этот пароль не совпадает с паролем текущего полтзователя, то задача не выполнится.


 
Александр Богданов   (2002-12-06 06:49) [5]

>Song

и как тогда быть если надо выключить компьютер
в назначеное время ?



Страницы: 1 вся ветка

Текущий архив: 2003.01.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
14-62791
RV
2002-12-31 08:28
2003.01.20
С новым годом!


14-62793
ПИТОН
2002-12-31 06:56
2003.01.20
Новый Год


1-62476
GRish
2003-01-10 08:41
2003.01.20
Заковырка про TFrame


1-62634
XPatriot[d.m.b]
2003-01-09 00:02
2003.01.20
Функция random.


3-62371
A_Gura
2002-12-16 06:27
2003.01.20
TIBQuery и Out of Memory (help)