Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 11 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Junior
Статус: Не в сети
Регистрация: 13.03.2004
Откуда: Белоруссия
Как в Делфи при определенном событии вырубать компьютер (как при нажатии на power). Дайте кусок кода.



Партнер
 

Member
Статус: Не в сети
Регистрация: 30.04.2004
Откуда: [Omsk Team]
baldA
самое простое
Код:
ExitWindowsEx(EWX_SHUTDOWN, EWX_FORCE);

но у вас должны быть права необходимые...

_________________
forum.omskteam.ru- Все о керамограните


 

Member
Статус: Не в сети
Регистрация: 18.01.2004
Фото: 0
API-шная функция ExitWindowsEx может это сделать как и многое другое (логофф, ресет и т.п.)

_________________
Да гоните вы все!


 

Junior
Статус: Не в сети
Регистрация: 13.03.2004
Откуда: Белоруссия
Dilon ну я вроде на своей машине как администратор. Вешаю ExitWindowsEx(EWX_SHUTDOWN, EWX_FORCE); на событие при нажатии кнопки- ничерта не происходит. Мысли, предложения... Прошу-с.


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Цитата:
ну я вроде на своей машине как администратор.

А это уже отношения никакого с вырубанию не имеет, разговор идет о привелегиях для процесса! :)
Код:
  function ChangeNTSecurityForShutdown: Boolean;
  { This func changes security rights on a WinNT 4.0 machine  }
  { to give app shutdown privileges.                          }
  var
    hToken : THandle;
    tkp,
    Newt   : TTokenPrivileges;
    retlength : DWORD;
  begin
      Result := False;
      if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES +
                          TOKEN_QUERY, hToken) <> False then
        begin
           { Get the LUID for shutdown privilege }
           if LookupPrivilegeValue( nil, 'SeShutdownPrivilege',
                                    tkp.Privileges[0].Luid) = True then
             begin
               tkp.PrivilegeCount := 1;  // One to set
               tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
               { Get shutdown privilege for this process }
               Result := AdjustTokenPrivileges(hToken, False, tkp,
                                               SizeOf(TTokenPrivileges), Newt,
                                               retlength);
             end;
        end;
  end;


 

Member
Статус: Не в сети
Регистрация: 30.04.2004
Откуда: [Omsk Team]
Ray Adams
неплохо бы проверку на вин делать (9x или Nt), а то в 98 она без всяких привелегий работать будет, а функций (*Provileges) не знает...

_________________
forum.omskteam.ru- Все о керамограните


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Dilon Это уже надо делать в процедура где будет делаться shutdown, провреил если NT то вызвал ChangeNTSecurityForShutdown, хотя я точно и не помню есть ли AdjustTokenPrivileges вообще в Win9x?


 

Member
Статус: Не в сети
Регистрация: 30.04.2004
Откуда: [Omsk Team]
Цитата:
хотя я точно и не помню есть ли AdjustTokenPrivileges

исключительно для NT:
Цитата:
Requirements
Client: Requires Windows XP, Windows 2000 Professional, or Windows NT Workstation 3.1 and later.
Server: Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 3.1 and later.

(c)msdn

_________________
forum.omskteam.ru- Все о керамограните


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Dilon Для Delphi это не обязательно :), приведенный код при запускке на Win9x просто ничего не будет делать, так как все экспортные функции в Дельфи пашут через заглушки :).
Специально проверял, набросал по быстрому прогу для вырукания компа.
Запустил Win9x, прекрасно все сработало :)


Последний раз редактировалось Ray Adams 17.06.2004 10:39, всего редактировалось 1 раз.

 

В самих дельфях есть функция SetSystemPowerState(False, True); где параметры задают это самое состояние: Hypernate, Sleep, Shutdown и еще какой-то...


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Короче говоря вот готовая процедура.

Код:
procedure ExitWindows32(ShutDownFlag: Word);
{ proc to Exit 32-bit Windows.  ShutDownFlag is either EWX_REBOOT, EWX_SHUTDOWN, or EWX_LOGOFF. }

  function ChangeNTSecurityForShutdown: Boolean;
  { This func changes security rights on a WinNT 4.0 machine  }
  { to give app shutdown privileges.                          }
  { Use proc ExitWindows32 to reboot or shutdown the machine. }
  var
    hToken : THandle;
    tkp,
    Newt   : TTokenPrivileges;
    retlength : DWORD;
  begin
      Result := False;
      if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES +
                          TOKEN_QUERY, hToken) <> False then
        begin
           { Get the LUID for shutdown privilege }
           if LookupPrivilegeValue( nil, 'SeShutdownPrivilege',
                                    tkp.Privileges[0].Luid) = True then
             begin
               tkp.PrivilegeCount := 1;  // One to set
               tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
               { Get shutdown privilege for this process }
               Result := AdjustTokenPrivileges(hToken, False, tkp,
                                               SizeOf(TTokenPrivileges), Newt,
                                               retlength);
             end;
        end;
  end;

begin
  if GetWindowsVersion = VER_PLATFORM_WIN32_NT then
    begin
      if ChangeNTSecurityForShutdown then
        ExitWindowsEx(ShutDownFlag, 0)
      else
        { Failed to change security rights to give us shutdown privilege. }
        MessageDlg('Unable to modify security rights for shutdown privileges.', mtError, [mbOK], 0);
    end
  else
    if GetWindowsVersion = VER_PLATFORM_WIN32_WINDOWS then
      ExitWindowsEx(ShutDownFlag, 0);
end;


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 11 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan