Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.29;
Скачать: CL | DM;

Вниз

Как вызвать стандартное приглашение к перезагрузке?   Найти похожие ветки 

 
Wolfram ©   (2006-11-28 08:00) [0]

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


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

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


 
Wolfram ©   (2006-11-28 08:51) [2]


> 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(); ?


 
Anatoly Podgoretsky ©   (2006-11-28 09:11) [3]

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

Да запросто

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

WindowsRebootByUserRequest;


 
Rouse_ ©   (2006-11-28 09:32) [4]

InitiateSystemShutdown


 
Wolfram ©   (2006-11-28 09:47) [5]


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

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


 
xShadow ©   (2006-11-28 09:55) [6]

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


 
Rouse_ ©   (2006-11-28 13:35) [7]


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

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


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


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

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


 
Rouse_ ©   (2006-11-29 09:26) [9]


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

Понял...

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

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


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

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


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

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

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


 
Eraser ©   (2006-11-30 16:24) [12]

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

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


 
vidiv ©   (2006-12-04 18:04) [13]

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

SetupPromptReboot(nil, handle, false);


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

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

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


 
Eraser ©   (2006-12-04 18:27) [15]

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

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


 
vidiv ©   (2006-12-04 18:37) [16]


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

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


 
Джо ©   (2006-12-04 18:39) [17]

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.04.29;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.036 c
15-1175006327
Леонид
2007-03-27 18:38
2007.04.29
ICQ


15-1175151640
PEAKTOP
2007-03-29 11:00
2007.04.29
Firebird v2.1 Alpha


15-1174982775
Игорь Шевченко
2007-03-27 12:06
2007.04.29
Не знает ли кто форматировщика исходных текстов на паскале


15-1175518322
Ega23
2007-04-02 16:52
2007.04.29
Как по-русски сказать?


2-1176116047
Steep
2007-04-09 14:54
2007.04.29
Че-то совсем туплю..