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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2007, 15:53   #1
LAFam
Пользователь
 
Регистрация: 13.10.2007
Сообщений: 11
По умолчанию Перезагрузка

На форумах много информации, но хочу еще раз обсудить как проще всего программно перезагрузить компьютер в определенное время?
Имееться в виду не через коммандную строчку (shutdown -s) а с помощью средств Delphi. Xnj, Windа закрывалась когда будет надо моей проге.
LAFam вне форума Ответить с цитированием
Старый 28.10.2007, 16:46   #2
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
Сообщение

Можно так:
Код:
program reboot;
uses
Windows, messages;
procedure RebootSystem;
var
handle_: THandle;
n: DWORD;
luid: TLargeInteger;
priv: TOKEN_PRIVILEGES;
ver: TOSVERSIONINFO;
begin
ver.dwOSVersionInfoSize := Sizeof(ver);
GetVersionEx(ver);
if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
begin
   if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, handle_) then
     if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then
     begin
       priv.PrivilegeCount := 1;
       priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
       priv.Privileges[0].Luid := luid;
       AdjustTokenPrivileges(handle_, false, priv, 0, nil, n);
     end
     else
       writeln('Error')
   else
     writeln('Error ');
end
else
   writeln('Error ');
if not ExitWindowsEx(EWX_POWEROFF,1) then
   writeln('Error');
end;
begin
RebootSystem;
end.
"Hy и запpосы y Вас..." - сказала база данных и повисла.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 28.10.2007, 16:59   #3
LAFam
Пользователь
 
Регистрация: 13.10.2007
Сообщений: 11
По умолчанию

А работать это будет под вин ХР и 2000?
LAFam вне форума Ответить с цитированием
Старый 28.10.2007, 17:09   #4
Slovinsky
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 79
По умолчанию

>> AlDelta
Где-то кто-то в ФАКе привел код, в котором по незнанию или невнимательности забыл освободить ресурсы, и все как один тупо копируют этот код и ту же ошибку допускают... Закрывать дескриптор маркера нужно по-хороему...
Slovinsky вне форума Ответить с цитированием
Старый 28.10.2007, 17:10   #5
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию

Будет. У меня ХР Sp2 перегружается.

Вот еще вариант:
Код:
mov  al,0F0h  
out 64h,al
Hе откладывайте покупку М$ Office 97 на завтpа...Лучше отложите ее HАВСЕГДА!
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 28.10.2007, 17:14   #6
Slovinsky
Пользователь
 
Регистрация: 26.10.2007
Сообщений: 79
По умолчанию

>> Вот еще вариант:
Тут вообще слов нет. И давно на NT-системах в 3-кольце можно вызывать привилегированые инструкции, коими in/out являются?.. Почитайте книжки про современные 32-разрядные ОС и защищенный режим работы процессора.

Последний раз редактировалось Slovinsky; 28.10.2007 в 17:49.
Slovinsky вне форума Ответить с цитированием
Старый 28.10.2007, 20:37   #7
LAFam
Пользователь
 
Регистрация: 13.10.2007
Сообщений: 11
По умолчанию

А как сделать чтоб выводилось окно с временем до перезагрузки?
как в shutdown или чтото на подобие этого.
LAFam вне форума Ответить с цитированием
Старый 28.10.2007, 20:48   #8
LAFam
Пользователь
 
Регистрация: 13.10.2007
Сообщений: 11
По умолчанию

Цитата:
Сообщение от AlDelta Посмотреть сообщение
Можно так:
Код:
program reboot;
uses
Windows, messages;
procedure RebootSystem;
var
handle_: THandle;
n: DWORD;
luid: TLargeInteger;
priv: TOKEN_PRIVILEGES;
ver: TOSVERSIONINFO;
begin
ver.dwOSVersionInfoSize := Sizeof(ver);
GetVersionEx(ver);
if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
begin
   if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, handle_) then
     if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', luid) then
     begin
       priv.PrivilegeCount := 1;
       priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
       priv.Privileges[0].Luid := luid;
       AdjustTokenPrivileges(handle_, false, priv, 0, nil, n);
     end
     else
       writeln('Error')
   else
     writeln('Error ');
end
else
   writeln('Error ');
if not ExitWindowsEx(EWX_POWEROFF,1) then
   writeln('Error');
end;
begin
RebootSystem;
end.
"Hy и запpосы y Вас..." - сказала база данных и повисла.


Это работает как офф для компа а как перегрузить?
LAFam вне форума Ответить с цитированием
Старый 28.10.2007, 21:28   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от LAFam Посмотреть сообщение
Это работает как офф для компа а как перегрузить?
Посмотреть в хэлпе про функцию ExitWindowsEx и выяснить, что для перезагрузки нужно использовать параметр EWX_REBOOT.
Как жаль, что использовать встроенный хэлп так трудно догадаться...
mihali4 вне форума Ответить с цитированием
Старый 28.10.2007, 21:33   #10
Shuraken
Форумчанин
 
Аватар для Shuraken
 
Регистрация: 16.04.2007
Сообщений: 298
По умолчанию

Данный код делится на две части: первая - установка привелегий, вторая (ExitWindowsEx) - выключение с флагом EWX_POWEROFF. Другие флаги:
EWX_LOGOFF: смена пользователя
EWX_REBOOT: перезагрузка.
EWX_SHUTDOWN, EWX_POWEROFF: выключение компьютера.
Не надо ничего усложнять. Все достаточно тривиально.
Shuraken вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перезагрузка компьютера antoha.by Паскаль, Turbo Pascal, PascalABC.NET 13 04.08.2008 09:39
Перезагрузка Windows asja Компьютерное железо 1 11.05.2008 13:22
Выключение и перезагрузка Патрон Win Api 8 26.03.2008 16:24
Перезагрузка компа Pusher Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 14 19.02.2008 20:54
Перезагрузка Windows agatos Свободное общение 7 21.01.2008 17:45