Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2011, 18:50   #1
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию перезагрузка компа

как можно перезагрузить комп с помощю делфи?
Pein95 вне форума Ответить с цитированием
Старый 05.01.2011, 18:58   #2
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

лучше бы вместо того, чтобы ждать ответ здесь - набрал бы в гугле "Перезагрузить компьютер Delphi" и возможно сразу же нашел бы ответ:
http://www.delphisources.ru/pages/fa...reboot_pc.html
http://www.sql.ru/faq/faq_topic.aspx?fid=690
С привилегиями:
Код:
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.Button18Click(Sender: TObject);
begin
 MyExitWindows(EWX_POWEROFF or EWX_FORCE);
end;

//Перезагрузка
procedure TForm1.Button19Click(Sender: TObject);
begin
  MyExitWindows(EWX_REBOOT or EWX_FORCE); 
end;
или без
Код:
ExitWindowsEx(EWX_REBOOT or ewx_force,0);
или
Код:
mov  al,0F0h  
out  64h,al
Ненавижу быть как все, но люблю, чтобы все были как я.

Последний раз редактировалось MyLastHit; 05.01.2011 в 19:03.
MyLastHit вне форума Ответить с цитированием
Старый 05.01.2011, 18:59   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

советую научится пользоватся поиском.
вам лень видимо...

функция ExitWindowsEx и вам еще нужно получать привилегию SE_SHUTDOWN_NAME
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.01.2011, 19:40   #4
misher
Участник клуба
 
Аватар для misher
 
Регистрация: 26.05.2010
Сообщений: 1,648
По умолчанию

Код:
procedure TForm1.sButton3Click(Sender: TObject);

var th, size: Cardinal;
    luid: Int64;
    tp: TOKEN_PRIVILEGES;
    ptp: PTokenPrivileges;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, th) then
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then
begin
tp.PrivilegeCount:=1;
tp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
tp.Privileges[0].Luid:=luid;
ptp:=nil;
AdjustTokenPrivileges(th, false, tp, 0, ptp^, size);
ExitWindowsEx(EWX_REBOOT or ewx_force,0);
end;
if   ExitWindowsEx(EWX_FORCE+EWX_REBOOT, 0)
 then

else
ShowMessage('Приложение не может завершить работу');




end;
This world will never be What I expected (c)
misher вне форума Ответить с цитированием
Старый 05.01.2011, 19:51   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
mov al,0F0h
out 64h,al
и как давно на третьем кольце доступны порты?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.01.2011, 20:20   #6
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

ASM не знаю. Ссылаюсь на http://www.delphisources.ru/pages/fa...reboot_pc.html
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перезагрузка компа lexab18 Операционные системы общие вопросы 8 07.09.2009 08:19
Выключение, Перезагрузка компа на Delphi Rebel123 Win Api 3 17.08.2009 17:00
Перезагрузка компа произвольно.... LT. Компьютерное железо 10 05.11.2008 20:43
Перезагрузка компа Pusher Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 14 19.02.2008 20:54
Перезагрузка компа, ждущий и спящий режим Yar Помощь студентам 2 21.08.2007 10:28