Главная страницаОбратная связьКарта сайта

Синхронизация завершения работы Windows

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
Diese Methode funktioniert nur auf Windows NT/2000/XP 
}

 { 
Works only on Windows NT/2000/XP systems 
}

 function TimedShutDown(Computer: string; Msg: string; Time: Word; Force: Boolean; Reboot: Boolean): Boolean;
 var
   rl: Cardinal;
   hToken: Cardinal;
   tkp: TOKEN_PRIVILEGES;
 begin
   //get user privileges to shutdown the machine, we are talking about win nt and 2k here 
  if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
     ShowMessage("Cannot open process token.")
   else
   begin
     if LookupPrivilegeValue(nil, "SeShutdownPrivilege", tkp.Privileges[0].Luid) then
     begin
       tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
       tkp.PrivilegeCount := 1;
       AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
       if GetLastError <> ERROR_SUCCESS then
        ShowMessage("Error adjusting process privileges.");
     end
   else
     ShowMessage("Cannot find privilege value.");
   end;

   Result := InitiateSystemShutdown(PChar(Computer), PChar(Msg), Time, Force, Reboot)
 end;

 //Start shut down 
procedure TForm1.Button1Click(Sender: TObject);
 begin
   if not TimedShutDown("\\computername", "you have to shutdown", 30, true, true) then
     ShowMessage("function failed...");
 end;

 //Abort shut down 
procedure TForm1.Button2Click(Sender: TObject);
 begin
   AbortSystemShutdown("\\computername");
 end;

Обсудить статью на форуме


Если Вас заинтересовала или понравилась информация по разработке на Delph - "Синхронизация завершения работы Windows", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:

Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!
   


Copyright © 2008 - 2024 Дискета.info