Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , ОС и Железо , Windows

Синхронизация завершения работы 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;

Программа Delphi, позволяющая удаленно отключать или перезапускать систему Windows NT, 2000 или XP. Программа использует функции InitiateSystemShutdown и AbortSystemShutdown из Windows API для достижения этого.

Вот разбивка кода:

Функция TimedShutDown

Эта функция принимает пять параметров:

  • Computer: имя компьютера, который нужно отключить (например, \computername)
  • Msg: сообщение, которое будет отображаться пользователю при отключении (например, 'you have to shutdown')
  • Time: количество секунд, которые нужно подождать перед отключением
  • Force: булевое значение, указывающее, нужно ли принудительно отключить систему без запроса у пользователя
  • Reboot: булевое значение, указывающее, нужно ли перезапустить компьютер после отключения

Функция сначала пытается открыть токен процесса с необходимыми правами для отключения системы. Если это не удается, она отображает сообщение об ошибке и возвращает False.

Если токен успешно открыт, функция ищет привилегию SeShutdownPrivilege и включает ее с помощью AdjustTokenPrivileges. Это позволяет программе изменять права токена.

Затем функция вызывает InitiateSystemShutdown с предоставленными параметрами. Если вызов неудачен, она отображает сообщение об ошибке и возвращает False.

Обработчик события Button1Click

Эта процедура вызывается при клике кнопки "Отключить". Она вызывает функцию TimedShutDown с указанными параметрами и проверяет ее возвращаемое значение. Если функция возвращает False, она отображает сообщение об ошибке.

Обработчик события Button2Click

Эта процедура вызывается при клике кнопки "Отменить отключение". Она вызывает функцию AbortSystemShutdown для отмены любого текущего операции отключения на указанном компьютере.

Замечания и ограничения

  • Это код работает только на системах Windows NT, 2000 или XP.
  • Программа требует административных прав для отключения или перезапуска системы.
  • Функция InitiateSystemShutdown может не работать, если пользователь отключил опцию "Разрешить удаленное отключение" в свойствах системы.

В целом, это полезная утилита для удаленного управления системами Windows. Однако, пожалуйста, учитывайте, что она работает только на старых версиях Windows и требует административных прав для функционирования.

В статье описывается метод синхронизации завершения работы Windows, который позволяет программно инициировать перезагрузку или остановку компьютера с заданным временем ожидания.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 01:06:59/0.0031640529632568/0