Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прога для выключения компа в определённое времы! [D7, XP]


Vovka ©   (2007-09-04 14:30:00) 

Доброе время суток!
Хочу написать прогу для выключения компа в определённое время! Неподскажите как мне можно это осуществить?
Зарание спосибо!


Anatoly Podgoretsky   (2007-09-04 15:46:00) [1]

> Steep  (04.09.2007 15:41:08)  [8]

Что ты сносишь, морду над ним, или выкусываешь его из системных библиотек.


Steep   (2007-09-04 15:41:00) [2]


> Она уже написана - системный планировщик, есть на каждом
> компьютере, кроме возможно старых.

Я ее первым делом делом из дистриба удаляю и блочу на установленных


Anatoly Podgoretsky   (2007-09-04 14:44:00) [3]

> Vovka  (04.09.2007 14:30:00)  [0]

Она уже написана - системный планировщик, есть на каждом компьютере, кроме возможно старых.


Инс   (2007-09-04 14:44:00) [4]

Сделайте для включения/отключения привилегий в маркере доступа отдельную функцию. Чтобы как-то мух от котлет отделять.
function EnablePrivilegeEx(Process: THandle; Name: String; Enable: Boolean):
 Boolean;
var
 LUID: TLargeInteger;
 Token: THandle;
 Privileges: TOKEN_PRIVILEGES;
 ReturnLength: Cardinal;
begin
 Result:=false;
 Win32Check(LookupPrivilegeValue(nil,PChar(Name),LUID));
 Win32Check(OpenProcessToken(Process,TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES,
   Token));
 try
   Privileges.PrivilegeCount:=1;
   Privileges.Privileges[0].Luid:=LUID;
   if Enable then
     Privileges.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED
   else
     Privileges.Privileges[0].Attributes:=0;
   AdjustTokenPrivileges(Token,false,Privileges,SizeOf(TOKEN_PRIVILEGES),
     Privileges,ReturnLength);
   if GetLastError = ERROR_SUCCESS then Result:=true;
 finally
   CloseHandle(Token);
 end;
end;


Ega23   (2007-09-04 14:41:00) [5]


> А дескриптор токена закрыть? ;)


Это не мой код. Но вообще - логично, я коллеге передам, спасибо.


Dib@zol   (2007-09-04 14:37:00) [6]

> [3] Инс ©   (04.09.07 14:36)

А на хрена? Кульхацкеры так не поступают. Им бы винду отрубить...


Инс   (2007-09-04 14:36:00) [7]


> [2] Ega23 ©   (04.09.07 14:34)

А дескриптор токена закрыть? ;)


Ega23   (2007-09-04 14:34:00) [8]


function TStandartUPS.ShutdownOS: Boolean;
const
 SE_SHUTDOWN_NAME='SeShutdownPrivilege';
var
 hToken: THandle;
 tkpNew, tkpPrevious: TTokenPrivileges;
 iLength: Cardinal;
begin
 Result:=False;

 // Получаем токен процесса
 if not OpenProcessToken(GetCurrentProcess,
             TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
   Exit;

 // Получаем LUID для привилегии завершения работы системы
 LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, tkpNew.Privileges[0].Luid);
 tkpNew.PrivilegeCount:=1; {установка одной привилегии}
 tkpNew.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;

 // Получаем привилегию завершения работы системы для процесса
 iLength:=SizeOf(TTokenPrivileges);
 AdjustTokenPrivileges(hToken, False, tkpNew, SizeOf(TTokenPrivileges),
   tkpPrevious, iLength);

 // Невозможно проверить возвращаемое значение функции AdjustTokenPrivileges
 if GetLastError<>ERROR_SUCCESS then
   Exit;

 // Завершаем работу системы и заставляем все приложения закрыться
 Result:=ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0);
end;


И в Планировщик задач aka Scheduler


Dib@zol   (2007-09-04 14:33:00) [9]

С какой целью?


Наверх

Титульная страница Поиск, карта сайта Написать письмо