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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перезагрузка в WinXP, Люди кто знает как комп в XP перезагрузи 
:(
    Опции темы
Fritz
  Дата 20.3.2004, 10:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Люди кто знает как перезагрузить комп в XP а то в нем (да и в 2000) неработает-
Win32Check(ExitWindowsEx(EWX_REBOOT);
  Вверх
Illusion Dolphin
Дата 20.3.2004, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 4
Всего: 63



Функция:

Код


function exitwindowsx(var action: integer): boolean;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';   // Borland forgot this declaration
var
hToken       : THandle;
tkp          : TTokenPrivileges;
tkpo         : TTokenPrivileges;
zero         : DWORD;
begin
if Pos( 'Windows NT', GetWinVersion) = 1  then // we've got to do a whole buch of things
   begin
      zero := 0;
      if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
         begin
           MessageBox( 0, 'Exit Error', 'OpenProcessToken() Failed', MB_OK );
           Exit;
         end;
      if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
         begin
           MessageBox( 0, 'Exit Error', 'OpenProcessToken() Failed', MB_OK );
           Exit;
         end;

      if not LookupPrivilegeValue( nil, 'SeShutdownPrivilege' , tkp.Privileges[ 0 ].Luid ) then
         begin
            MessageBox( 0, 'Exit Error', 'LookupPrivilegeValue() Failed', MB_OK );
            Exit;
         end;
      tkp.PrivilegeCount := 1;
      tkp.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;

      AdjustTokenPrivileges( hToken, False, tkp, SizeOf( TTokenPrivileges ), tkpo, zero );
      if Boolean( GetLastError() ) then
         begin
            MessageBox( 0, 'Exit Error', 'AdjustTokenPrivileges() Failed', MB_OK );
            Exit;
         end // if Boolean( GetLastError() )
      else
         ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
    end // if OSVersion = 'Windows NT'
 else
    begin // just shut the machine down
      ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
    end; // else
end;



Компонент:
Код


unit XReboot;

{
TXWinReboot 2.0
===============
A component for computer restart, reboot, shutdown, suspend and hibernate.

Freeware.

Copyright © 1998 Roman Stedronsky, [email protected].

All rights reserved. You may use this software in an application
without fee or royalty, provided this copyright notice remains intact.

properties:

  property Operation: TRebootOperation;  type of reboot operation
roLogOff         Shuts down all processes, then it logs the user off.
roReboot  Shuts down the system and then restarts the system.
roShutDown  Shuts down the system, flushs file buffers, stops processes.
roSuspend  Suspends using RAM-alive technique.
roHibernate  Suspends using hibernate technique.
  property PowerOff: boolean;    Shuts down the system and turns off the power (only with roShutDown).
  property ForceTerminateProcesses: boolean;  Forces processes to terminate.

methods:

  function Execute: boolean;    reboot
}

interface

uses
Windows, Classes;

type
TRebootOperation = (roLogOff, roReboot, roShutDown, roSuspend, roHibernate);

type
TXWinReboot = class(TComponent)
protected
  FOperation: TRebootOperation;
  FPowerOff: boolean;
  FForceTerminateProcesses: boolean;
  function SetShutdownPrivilege(Enable: boolean): boolean;
public
  constructor Create(AOwner: TComponent); override;
  function Execute: boolean;
published
  property Operation: TRebootOperation read FOperation write FOperation default roReboot;
  property PowerOff: boolean read FPowerOff write FPowerOff default false;
  property ForceTerminateProcesses: boolean read FForceTerminateProcesses write FForceTerminateProcesses default false;
end;

procedure Register;

implementation

const
cRebootFlags: array[TRebootOperation] of integer = (EWX_LOGOFF, EWX_REBOOT, EWX_SHUTDOWN, 0, 0);
cPowerOff = EWX_POWEROFF;
cForceTerminateProcesses = EWX_FORCE;
cPrivilegeName = 'SeShutdownPrivilege';

constructor TXWinReboot.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Operation := roReboot;
PowerOff := false;
ForceTerminateProcesses := false;
end;

function TXWinReboot.SetShutdownPrivilege(Enable: boolean): boolean;
var
PrevPrivileges: TTokenPrivileges;
Privileges: TTokenPrivileges;
Token: THandle;
dwRetLen: DWord;
begin
Result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token);
Privileges.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, PChar(cPrivilegeName), Privileges.Privileges[0].LUID) then
begin
  if Enable then
    Privileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
  else
    Privileges.Privileges[0].Attributes := 0;
  dwRetLen := 0;
  Result := AdjustTokenPrivileges(Token, False, Privileges, SizeOf(PrevPrivileges), PrevPrivileges, dwRetLen);
end;
CloseHandle(Token);
end;

function TXWinReboot.Execute: boolean;
var
Flags: integer;
begin
SetShutdownPrivilege(true);
if Operation in [roLogOff..roShutDown] then
begin
  Flags := cRebootFlags[FOperation];
  if FPowerOff then Flags := Flags or cPowerOff;
  if FForceTerminateProcesses then Flags := Flags or cForceTerminateProcesses;
  Result := ExitWindowsEx(Flags, 0);
end
else
  Result := SetSystemPowerState(Operation = roSuspend, FForceTerminateProcesses);
SetShutdownPrivilege(false);
end;

procedure Register;
begin
RegisterComponents('Extra', [TXWinReboot]);
end;

end.






--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Letov
Дата 31.5.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 22.2.2007
Где: Санкт-Петербург

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



Код

ExitWindowsEx(EWX_REBOOT, 0);



--------------------
Не бывает плохих языков программирования. Бывают плохие программисты...

PM MAIL   Вверх
sw04
Дата 31.5.2007, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 22.1.2007
Где: Ufa

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



Fritz, в drkb есть куча примеров с различнейшими опциями.

Это сообщение отредактировал(а) sw04 - 31.5.2007, 19:57


--------------------
<удалено администрацией>
PM   Вверх
Coder
Дата 4.6.2007, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 11



можно вызвать 
Код

shutdown.exe -s -t 0

PM MAIL   Вверх
Poseidon
Дата 4.6.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Letov, в ХР нужны привелегии. Простым ExitWindowsEx получится только завершить сеанс пользователя.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Letov
Дата 7.6.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 22.2.2007
Где: Санкт-Петербург

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



Цитата(Poseidon @  4.6.2007,  22:12 Найти цитируемый пост)
Letov, в ХР нужны привелегии. Простым ExitWindowsEx получится только завершить сеанс пользователя.

Ну, не знаю. Я тестил это на нескольких машинах. Все идет норм.


--------------------
Не бывает плохих языков программирования. Бывают плохие программисты...

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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 187
Регистрация: 7.12.2006
Где: Belarussia, Gomel

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



Вось, работает под любой виндой, тестил неоднократно(под Vista врядли пойдет!,)!!! smile 
(Убивает процессы!!)
Код

// вначале опишем функцию вырубки винды
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;

// Вырубить комп:

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

//ЗаРебутить:

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




Это сообщение отредактировал(а) valentos - 7.6.2007, 21:19
--------------------
[code=sql]select name, telephone from Girls where age between 20 and 25 and (.)(.) >= 2 order by IQ desc [/code]
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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