Главная страница
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.021 c
1-62523
Kventin
2003-01-10 18:55
2003.01.20
MS Word & html


1-62451
Ya Vasya
2003-01-08 20:43
2003.01.20
FreeReport - Export


8-62667
AlexT1000
2002-10-02 14:55
2003.01.20
ссылки на любые материалы по работе с векторной графикой


1-62608
Link
2003-01-09 10:27
2003.01.20
Delphi и Excel


8-62668
TheSight
2002-07-04 15:29
2003.01.20
Анализатор речи (схожести произношения)