Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как вызвать стандартное приглашение к перезагрузке? [D7, Win2k, WinXP]


Wolfram ©   (2006-11-28 08:00:00) 

После установки драйверов и некоторых других программ система выводит диалоговое окно типа «Новые параметры вступять в силу после перезагрузки системы. Произвести сейчас?» или «Для завершения установки необходимо перезапустить систему. Произвести сейчас?». Так вот, можно ли как-то из своей программы вывести это окно, чтобы самому не вызывать MessageBox, а потом делать рибут?


vidiv   (2006-12-04 18:45:00) [1]

Делает-делает, назло =)


Джо   (2006-12-04 18:39:00) [2]

> [16] vidiv ©   (04.12.06 18:37)
>
> > Джо ©   (04.12.06 18:14) [14]
> > Крайне нехитрый диалог, не так ли? :)
>
> Ну почему же. Обычный диалог при нажатии на Да автоматически
> ребут не делает =)

А этот делает (не проверял)? Тогда, возможно, мой скепсис и неуместен. Иногда может оказаться полезным сей диалог.


vidiv   (2006-12-04 18:37:00) [3]


> Джо ©   (04.12.06 18:14) [14]
> Крайне нехитрый диалог, не так ли? :)

Ну почему же. Обычный диалог при нажатии на Да автоматически ребут не делает =)


Eraser   (2006-12-04 18:27:00) [4]

> [14] Джо ©   (04.12.06 18:14)

который к тому же не поддерживает стили XP... всегда меня "добивал" дизайн данного диалога )


Джо   (2006-12-04 18:14:00) [5]

> [13] vidiv ©   (04.12.06 18:04)

Крайне нехитрый диалог, не так ли? :)


vidiv   (2006-12-04 18:04:00) [6]

function SetupPromptReboot(FileQueue: Pointer; Owner: HWND; ScanOnly: BOOL): Integer; stdcall;  external 'SetupApi.dll' name 'SetupPromptReboot';
или
uses SetupApi

SetupPromptReboot(nil, handle, false);


Eraser   (2006-11-30 16:24:00) [7]

> [0] Wolfram ©   (28.11.06 08:00)

скриншот "стандартного окна" в студию!


Джо   (2006-11-29 18:02:00) [8]

> [9] Rouse_ ©   (29.11.06 09:26)
> Этот диалог выводит не система, а инсталятор, сам, ручками...

Да в системе тоже есть такой диалог, при изменении некоторых настроек. Но он тривиальный — "Do you want etc" и Yes/No. Так что проблемы автора, действительно, непонятны.


DVM   (2006-11-29 10:58:00) [9]

Вот ведь раздули из ничего слона!


Rouse_   (2006-11-29 09:26:00) [10]


> Мне нужно СПРОСИТЬ у юзера разрешения на рибут!

Понял...

> После установки драйверов и некоторых других программ система
> выводит диалоговое окно типа «Новые параметры вступять в
> силу после перезагрузки системы. Произвести сейчас?» или
> «Для завершения установки необходимо перезапустить систему.
>  Произвести сейчас?».

Этот диалог выводит не система, а инсталятор, сам, ручками...


Wolfram   (2006-11-29 06:23:00) [11]


> Rouse_ ©
> Ну тогда еще раз обьясняю, InitiateSystemShutdown... Так
> понятно?

Да... что в лоб, что по лбу...
Мне нужно СПРОСИТЬ у юзера разрешения на рибут! Так понятно? Нафиг мне это окно обратного отсчёта! Проще уже написать WinExec('shutdown -r -t 0', SW_HIDE); и не парится.
Ладно, чем эту демагогию разводить, проще самому всё ручками сделать.


Rouse_   (2006-11-28 13:35:00) [12]


> вопрос: Как вызвать стандартное приглашение к перезагрузке?
>
> Стандартное блин, а не своё!

Ну тогда еще раз обьясняю, InitiateSystemShutdown...
Так понятно?


xShadow   (2006-11-28 09:55:00) [13]

http://www.swissdelphicenter.ch/torry/showcode.php?id=1232


Wolfram   (2006-11-28 09:47:00) [14]


> Anatoly Podgoretsky ©
> Да запросто

Народ, я конечно вам очень признателен за то, что вы мне объясняете как можно идти в обход (что я и сам прекрасно знаю), но я задал конкретный вопрос: Как вызвать стандартное приглашение к перезагрузке?
Стандартное блин, а не своё!


Rouse_   (2006-11-28 09:32:00) [15]

InitiateSystemShutdown


Anatoly Podgoretsky   (2006-11-28 09:11:00) [16]

> Wolfram  (28.11.2006 08:51:02)  [2]

Да запросто

procedure WindowsRebootByUserRequest;
begin
...
if MessageBox(..............)=IDYES then Reboot;
...
end;

WindowsRebootByUserRequest;


Wolfram   (2006-11-28 08:51:00) [17]


> Dmitrij_K   (28.11.06 08:17) [1]
> Что тебе MessageBox сделал, что ты его так не любишь?

Блин, обясняю на пальцах. Чтобы сделать то, что мне нужно, надо написать примерно такой код:

function GetPrivilege: boolean;
var
 handle, ph: THandle;
 pid: DWORD;
 luid: TLargeInteger;
 priv: TOKEN_PRIVILEGES;
begin
if ver.dwPlatformId=VER_PLATFORM_WIN32_NT then
begin
 pid := GetCurrentProcessId;
 ph := OpenProcess(PROCESS_ALL_ACCESS, false, pid);
 if OpenProcessToken(ph, 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;
   result:=AdjustTokenPrivileges(handle, false, priv, 0, nil, pid);
   exit;
 end;
 result:=false;
end
else result:=true;

function Reboot: boolean;
begin
 if GetPrivilege then result:=ExitWindowsEx(EWX_REBOOT, 0)
 else result:=false;
end;

begin
...
if MessageBox(..............)=IDYES then Reboot;
...
end.

А, может быть, проще вызвать что-то типа WindowsRebootByUserRequest(); ?


Dmitrij_K   (2006-11-28 08:17:00) [18]

Что тебе MessageBox сделал, что ты его так не любишь?


Наверх

Титульная страница Поиск, карта сайта Написать письмо