![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вызвать стандартное приглашение к перезагрузке? [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 сделал, что ты его так не любишь?