Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перезагрузка, Корректная 
:(
    Опции темы
Alex
Дата 12.9.2004, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 6
Всего: 162



Нужен исходник корректной перезагрузки любой винды. Чтобы перезагрузка ни чем не отличалась от той, что вызывается через пуск.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Pakshin A. S.
Дата 12.9.2004, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



http://forum.vingrad.ru/index.php?showtopic=29431
Здесь несколько выриантов перезагрузки в том числе для NT-подобных Win'ов.
PM   Вверх
Pakshin A. S.
Дата 12.9.2004, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Ещё почти того же, но распростаненней:
Цитата

shutdown / reboot / logoff Windows 9x/NT/Me/2000/XP? 
Autor: NeuralAbyss Software 
Homepage: http://www.neuralabyss.com


Код

{1.}

function MyExitWindows(RebootParam: Longword): Boolean;
var
 TTokenHd: THandle;
 TTokenPvg: TTokenPrivileges;
 cbtpPrevious: DWORD;
 rTTokenPvg: TTokenPrivileges;
 pcbtpPreviousRequired: DWORD;
 tpResult: Boolean;
const
 SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
 if Win32Platform = VER_PLATFORM_WIN32_NT then
 begin
   tpResult := OpenProcessToken(GetCurrentProcess(),
     TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
     TTokenHd);
   if tpResult then
   begin
     tpResult := LookupPrivilegeValue(nil,
                                      SE_SHUTDOWN_NAME,
                                      TTokenPvg.Privileges[0].Luid);
     TTokenPvg.PrivilegeCount := 1;
     TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
     cbtpPrevious := SizeOf(rTTokenPvg);
     pcbtpPreviousRequired := 0;
     if tpResult then
       Windows.AdjustTokenPrivileges(TTokenHd,
                                     False,
                                     TTokenPvg,
                                     cbtpPrevious,
                                     rTTokenPvg,
                                     pcbtpPreviousRequired);
   end;
 end;
 Result := ExitWindowsEx(RebootParam, 0);
end;

// Example to shutdown Windows:

procedure TForm1.Button1Click(Sender: TObject);
begin
 MyExitWindows(EWX_POWEROFF or EWX_FORCE);
end;

// Example to reboot Windows:

procedure TForm1.Button1Click(Sender: TObject);
begin
 MyExitWindows(EWX_REBOOT or EWX_FORCE);
end;


// Parameters for MyExitWindows()


{************************************************************************}

{2. Console Shutdown Demo}

program Shutdown;
{$APPTYPE CONSOLE}

uses
 SysUtils,
 Windows;

// Shutdown Program
// (c) 2000 NeuralAbyss Software
// www.neuralabyss.com

var
 logoff: Boolean = False;
 reboot: Boolean = False;
 warn: Boolean = False;
 downQuick: Boolean = False;
 cancelShutdown: Boolean = False;
 powerOff: Boolean = False;
 timeDelay: Integer = 0;

function HasParam(Opt: Char): Boolean;
var
 x: Integer;
begin
 Result := False;
 for x := 1 to ParamCount do
   if (ParamStr(x) = '-' + opt) or (ParamStr(x) = '/' + opt) then Result := True;
end;

function GetErrorstring: string;
var
 lz: Cardinal;
 err: array[0..512] of Char;
begin
 lz := GetLastError;
 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, lz, 0, @err, 512, nil);
 Result := string(err);
end;

procedure DoShutdown;
var
 rl, flgs: Cardinal;
 hToken: Cardinal;
 tkp: TOKEN_PRIVILEGES;
begin
 flgs := 0;
 if downQuick then flgs := flgs or EWX_FORCE;
 if not reboot then flgs := flgs or EWX_SHUTDOWN;
 if reboot then flgs := flgs or EWX_REBOOT;
 if poweroff and (not reboot) then flgs := flgs or EWX_POWEROFF;
 if logoff then flgs := (flgs and (not (EWX_REBOOT or EWX_SHUTDOWN or EWX_POWEROFF))) or
     EWX_LOGOFF;
 if Win32Platform = VER_PLATFORM_WIN32_NT then
 begin
   if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
     hToken) then
     Writeln('Cannot open process token. [' + GetErrorstring + ']')
   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
         Writeln('Error adjusting process privileges.');
     end
     else
       Writeln('Cannot find privilege value. [' + GetErrorstring + ']');
   end;
   {   if CancelShutdown then
         if AbortSystemShutdown(nil) = False then
           Writeln(\'Cannot abort. [\' + GetErrorstring + \']\')
         else
          Writeln(\'Cancelled.\')
      else
      begin
        if InitiateSystemShutdown(nil, nil, timeDelay, downQuick, Reboot) = False then
           Writeln(\'Cannot go down. [\' + GetErrorstring + \']\')
        else
           Writeln(\'Shutting down!\');
      end;
   }
 end;
 //     else begin
 ExitWindowsEx(flgs, 0);
 //     end;
end;

begin
 Writeln('Shutdown v0.3 for Win32 (similar to the Linux version)');
 Writeln('(c) 2000 NeuralAbyss Software. All Rights Reserved.');
 if HasParam('?') or (ParamCount = 0) then
 begin
   Writeln('Usage:    shutdown [-akrhfnc] [-t secs]');
   Writeln('                  -k:      don''t really shutdown, only warn.');
   Writeln('                  -r:      reboot after shutdown.');
   Writeln('                  -h:      halt after shutdown.');
   Writeln('                  -p:      power off after shutdown');
   Writeln('                  -l:      log off only');
   Writeln('                  -n:      kill apps that don''t want to die.');
   Writeln('                  -c:      cancel a running shutdown.');
 end
 else
 begin
   if HasParam('k') then warn := True;
   if HasParam('r') then reboot := True;
   if HasParam('h') and reboot then
   begin
     Writeln('Error: Cannot specify -r and -h parameters together!');
     Exit;
   end;
   if HasParam('h') then reboot := False;
   if HasParam('n') then downQuick := True;
   if HasParam('c') then cancelShutdown := True;
   if HasParam('p') then powerOff := True;
   if HasParam('l') then logoff := True;
   DoShutdown;
 end;
end.





 
// Parameters for MyExitWindows()


EWX_LOGOFF

Shuts down all processes running in the security context of the process that called the
ExitWindowsEx function. Then it logs the user off.

Alle Prozesse des Benutzers werden beendet, danach wird der Benutzer abgemeldet.

EWX_POWEROFF

Shuts down the system and turns off the power.
The system must support the power-off feature.
Windows NT/2000/XP:
The calling process must have the SE_SHUTDOWN_NAME privilege.

Fдhrt Windows herunter und setzt den Computer in den StandBy-Modus,
sofern von der Hardware unterstьtzt.

EWX_REBOOT

Shuts down the system and then restarts the system.
Windows NT/2000/XP: The calling process must have the SE_SHUTDOWN_NAME privilege.

Fдhrt Windows herunter und startet es neu.

EWX_SHUTDOWN

Shuts down the system to a point at which it is safe to turn off the power.
All file buffers have been flushed to disk, and all running processes have stopped.
If the system supports the power-off feature, the power is also turned off.
Windows NT/2000/XP: The calling process must have the SE_SHUTDOWN_NAME privilege.

Fдhrt Windows herunter.

 
EWX_FORCE

Forces processes to terminate. When this flag is set,
the system does not send the WM_QUERYENDSESSION and WM_ENDSESSION messages.
This can cause the applications to lose data.
Therefore, you should only use this flag in an emergency.

Die aktiven Prozesse werden zwangsweise und ohne Rьckfrage beendet.

EWX_FORCEIFHUNG

Windows 2000/XP: Forces processes to terminate if they do not respond to the
WM_QUERYENDSESSION or WM_ENDSESSION message. This flag is ignored if EWX_FORCE is used.

Windows 2000/XP: Die aktiven Prozesse werden aufgefordert, sich selbst zu beenden und
mьssen dies bestдtigen. Reagieren sie nicht, werden sie zwangsweise beendet.

PM   Вверх
Alex
Дата 12.9.2004, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 6
Всего: 162



Сенькс smile.gif


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Pakshin A. S.
Дата 12.9.2004, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Всегда рад помочь кодом или оветом... biggrin.gif

Черкни, если вариант с http://swissdelphicenter.ch/en/ пройдёт по XP без ошибок... smile.gif
PM   Вверх
Alex
Дата 12.9.2004, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 6
Всего: 162



1 вариант нормально работает под ХР.
2 вариант не проверял.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Pakshin A. S.
Дата 13.9.2004, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Спасибо за инфу...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.