Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]
Помогите с удалением драйвера из директории system32\drivers.Система W64.Драйвер прописывается в обе директории SysWOW64 и System32.
Пробовал через секцию [UninstallDelete] удаляется только из SysWOW64, а директорию System32 в упор не видит, хотя прописывал
{sys}\driver\drv.sys и {win}\system32\drivers\drv.sys, реакции ноль.Как победить эту напасть.
R.i.m.s.k.y.
10-09-2013, 22:47
TryRooM, читать в справке про режим x64
Про это Flags: 64bit я в курсе, но как прикрутить этот флаг к удалению не пойму.
Здравствуйте, подскажите как сделать чтоб при нажатии на картинку открывался сайт в браузере?
Здравствуйте, подскажите как сделать чтоб при нажатии на картинку открывался сайт в браузере? »
[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа
DefaultGroupName=Моя программа
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
DestName: "Image.bmp"; Source: "compiler:WizModernSmallImage-IS.bmp"; Flags: dontcopy solidbreak
[Code_]
procedure OpenSite(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExecAsOriginalUser('open', 'http://www.innosetup.com/', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
procedure RedesignWizardForm;
begin
with TBitmapImage.Create(WizardForm) do
begin
Parent := WizardForm;
SetBounds(ScaleX(25), ScaleY(313), ScaleX(55), ScaleY(55));
Cursor := crHand;
ExtractTemporaryFile('Image.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image.bmp'));
OnClick := @OpenSite;
end;
end;
procedure InitializeWizard();
begin
RedesignWizardForm;
end;
Пример » спасибо попробуем)
Привет! Вопрос, можно ли поменять заглавие у стандартной формочки, выдаваемой MsgBox? Или свою надо рисовать для этого случая?
Shkutu, воспользоваться
function MsgBoxEx(AWnd: HWND; AText, ACaption: string; AType, AIcon: UINT; ATimeOut: Integer): Integer;
Правда она работает на инно только от китайских друзей.
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[ code]
procedure InitializeWizard();
begin
MsgBoxEx(0, 'Какое-то сообщение', 'Какой-то заголовок', MB_OK or MB_ICONINFORMATION, 0, 5{время до закрытия в сек. если 0 - таймер выкл.});
end;
Правда она работает на инно только от китайских друзей. »
Ну да, моя студия на эту функцию ругается. А не подскажете, где взять ту самую версию "от китайских друзей"?:)
И еще. Может кто-нибудь знает, есть ли где-нибудь список кодов ошибок?
А то приходится поневоле ковырять чужой скрипт, при попытке компиляции выдает "Internal error (20)". Не пойму, что за ошибка
Shkutu, http://innoultra.ru/
Ну или Расширенная версия Inno Setup от Restools (http://forum.oszone.net/showthread.php?p=1201499#post1201499)
Вопрос, можно ли поменять заглавие у стандартной формочки, выдаваемой MsgBox? »
Помимо расширенного MsgBoxEx от китайских собратьев, можно использовать системные MessageBox:
[code]
#define A = (Defined UNICODE) ? "W" : "A"
//const
// MB_ICONINFORMATION = $40;
// MB_ICONEXCLAMATION = $30;
// MB_ICONQUESTION = $20;
// MB_ICONSTOP = $10;
// MB_ICONNONE = $10;
// MB_SYSTEMMODAL = $1000;
function MessageBox(AWnd: HWND; mbText, mbCaption: String; mbType: Cardinal): Integer;
external 'MessageBox{#A}@user32.dll stdcall';
function InitializeSetup(): Boolean;
begin
MessageBox(Application.Handle, 'Сообщение', 'Заголовок', MB_OK or $40);
end;
nik1967, попробовала поставить инно от Restools, вроде все по инструкции, но скрипт даже не компилится, внезапно ругается на неизвестные данной версии inno сообщения в default.isl.
saurn, спасибо, то, что надо!:)
Johny777
13-09-2013, 16:39
saurn, Shkutu, до кучи имплементация WinApi функции MessageBoxIndirect
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645511%28v=vs.85%29.aspx
входные аргументы по большей части вынес в перечисляемые типы. Так будет проще, чем с флагами
У этого диалогового окна есть возможности настройки, которых нет у встроенных диалоговых окон китайской версии:
#define A = (Defined UNICODE) ? "W" : "A"
const
MB_ICONHAND = $00000010;
MB_ICONQUESTION_ = $00000020;
MB_ICONEXCLAMATION = $00000030;
MB_ICONASTERISK = $00000040;
MB_USERICON = $00000080;
MB_HELP = $00004000;
MB_CANCELTRYCONTINUE = $00000006;
MB_DEFBUTTON4 = $00000300;
MB_APPLMODAL = $00000000;
MB_SYSTEMMODAL = $00001000;
MB_TASKMODAL = $00002000;
IDTRYAGAIN = 10;
IDCONTINUE = 11;
type
Pointer = Longint;
_HELPINFO = record { Structure pointed to by lParam of WM_HELP }
cbSize: UINT; { Size in bytes of this struct }
iContextType: Integer; { Either HELPINFO_WINDOW or HELPINFO_MENUITEM }
iCtrlId: Integer; { Control Id or a Menu item Id. }
hItemHandle: THandle; { hWnd of control or hMenu. }
dwContextId: DWORD_PTR;{ Context Id associated with this item }
MousePos: TPoint; { Mouse Position in screen co-ordinates }
end;
HINST = THandle;
TPRMsgBoxCallback = Pointer;
_MSGBOXPARAMS = record
cbSize: UINT;
hwndOwner: HWND;
hInstance: HINST;
lpszText: String;
lpszCaption: String;
dwStyle: DWORD;
lpszIcon: String;
dwContextHelpId: DWORD_PTR;
lpfnMsgBoxCallback: TPRMsgBoxCallback;
dwLanguageId: DWORD;
end;
////////////////////////////////////////////////////////////////////
_MBOX_EX_BTNSET =
(
_mb_Abort_Retry_Ignore,
_mb_Cancel_TryAgain_Continue,
_mb_Ok,
_mb_Ok_Cancel,
_mb_Retry_Cancel,
_mb_Yes_No,
_mb_Yes_No_Cancel
);
_MBOX_EX_BTN =
(
_btn_Abort,
_btn_Retry,
_btn_Ignore,
_btn_TryAgain,
_btn_Continue,
_btn_Ok,
_btn_Cancel,
_btn_Yes,
_btn_No
);
_MBOX_EX_ICON =
(
_ico_Warning,
_ico_Error,
_ico_Information,
_ico_Question
);
_MBOX_EX_SHOW =
(
_mb_Modal_App,
_mb_Modal_System,
_mb_Modal_Task
);
function MessageBoxIndirect(const MsgBoxParams: _MSGBOXPARAMS): Integer; external 'MessageBoxIndirect{#A}@user32.dll stdcall';
procedure MessageBoxExDefHelpProc(var lpHelpInfo: _HELPINFO);
begin
MsgBox('Help', mbInformation, MB_OK);
end;
function MessageBoxEx(
const _hwnd: HWND; // хэнл окна - если равен 0 и включена кнопка "справка" сообщение о нажатии кнопки передаётся в каллбэк процедуру MessageBoxExDefHelpProc; если хэндл не 0, то обрабатывам хелп сообщении WM_HELP окну с хэндлом _hwnd
const Message: String; // текст сообщения
const Caption: String; // заголовок окна
const Buttons: _MBOX_EX_BTNSET; // набор кнопок
const FocusButton: _MBOX_EX_BTN; // на какой из кнопок должен быть фокус
const AddHelpButton: Boolean; // булев значение, добавление кнопки "Справка"
const FocusHelpButton: Boolean; // установить фокус на кнопку "справка". Если True, то значение в FocusButton игнорируется
const Icon: _MBOX_EX_ICON; // тип иконки
const Modal: _MBOX_EX_SHOW // тип отображения окна
): _MBOX_EX_BTN; // возвращает нажатую кнопку
var
mp: _MSGBOXPARAMS;
dwFlags: DWORD;
begin
case Buttons of
_mb_Abort_Retry_Ignore:
begin
dwFlags := MB_ABORTRETRYIGNORE;
if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON4
else
case FocusButton of
_btn_Abort: dwFlags := dwFlags or MB_DEFBUTTON1;
_btn_Retry: dwFlags := dwFlags or MB_DEFBUTTON2;
_btn_Ignore: dwFlags := dwFlags or MB_DEFBUTTON3;
else
dwFlags := dwFlags or MB_DEFBUTTON1;
end;
end;
_mb_Cancel_TryAgain_Continue:
begin
dwFlags := MB_CANCELTRYCONTINUE;
if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON4
else
case FocusButton of
_btn_Cancel: dwFlags := dwFlags or MB_DEFBUTTON1;
_btn_TryAgain: dwFlags := dwFlags or MB_DEFBUTTON2;
_btn_Continue: dwFlags := dwFlags or MB_DEFBUTTON3;
else
dwFlags := dwFlags or MB_DEFBUTTON1;
end;
end;
_mb_Ok:
begin
dwFlags := MB_OK;
if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON2
end;
_mb_Ok_Cancel:
begin
dwFlags := MB_OKCANCEL;
if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON3
else
case FocusButton of
_btn_Ok: dwFlags := dwFlags or MB_DEFBUTTON1;
_btn_Cancel: dwFlags := dwFlags or MB_DEFBUTTON2;
else
dwFlags := dwFlags or MB_DEFBUTTON1;
end;
end;
_mb_Retry_Cancel:
begin
dwFlags := MB_RETRYCANCEL;
if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON3
else
case FocusButton of
_btn_Retry: dwFlags := dwFlags or MB_DEFBUTTON1;
_btn_Cancel: dwFlags := dwFlags or MB_DEFBUTTON2;
else
dwFlags := dwFlags or MB_DEFBUTTON1;
end;
end;
_mb_Yes_No:
begin
dwFlags := MB_YESNO;
if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON3
else
case FocusButton of
_btn_Yes: dwFlags := dwFlags or MB_DEFBUTTON1;
_btn_No: dwFlags := dwFlags or MB_DEFBUTTON2;
else
dwFlags := dwFlags or MB_DEFBUTTON1;
end;
end;
_mb_Yes_No_Cancel:
begin
dwFlags := MB_YESNOCANCEL;
if AddHelpButton and FocusHelpButton then dwFlags := dwFlags or MB_DEFBUTTON4
else
case FocusButton of
_btn_Yes: dwFlags := dwFlags or MB_DEFBUTTON1;
_btn_No: dwFlags := dwFlags or MB_DEFBUTTON2;
_btn_Cancel: dwFlags := dwFlags or MB_DEFBUTTON3;
else
dwFlags := dwFlags or MB_DEFBUTTON1;
end;
end;
end;
case Icon of
_ico_Warning: dwFlags := dwFlags or MB_ICONEXCLAMATION;
_ico_Error: dwFlags := dwFlags or MB_ICONHAND;
_ico_Information: dwFlags := dwFlags or MB_ICONASTERISK;
_ico_Question: dwFlags := dwFlags or MB_ICONQUESTION;
end;
if _hwnd <> 0 then
case Modal of
_mb_Modal_App: dwFlags := dwFlags or MB_APPLMODAL;
_mb_Modal_System: dwFlags := dwFlags or MB_SYSTEMMODAL;
_mb_Modal_Task: dwFlags := dwFlags or MB_TASKMODAL;
end;
mp.cbSize:= SizeOf(mp);
mp.hInstance:= hInstance;
mp.hwndOwner:= _hwnd;
mp.lpszText:= Message;
mp.lpszCaption:= Caption;
if AddHelpButton then
begin
dwFlags := dwFlags or MB_HELP;
if _hwnd = 0 then mp.lpfnMsgBoxCallback := CallBackAddr('MessageBoxExDefHelpProc');
end;
mp.dwStyle:= dwFlags;
case MessageBoxIndirect(mp) of
IDABORT: Result := _btn_Abort;
IDRETRY: Result := _btn_Retry;
IDIGNORE: Result := _btn_Ignore;
IDTRYAGAIN: Result := _btn_TryAgain;
IDCONTINUE: Result := _btn_Continue;
IDOK: Result := _btn_Ok;
IDCANCEL: Result := _btn_Cancel;
IDYES: Result := _btn_Yes;
IDNO: Result := _btn_No;
end;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
repeat
until MessageBoxEx(0, 'Test message', 'Test Caption', _mb_Cancel_TryAgain_Continue, _btn_TryAgain, True, False, _ico_Warning, _mb_Modal_Task) <> _btn_TryAgain;
end;
El Sanchez
13-09-2013, 17:29
можно ли поменять заглавие у стандартной формочки, выдаваемой MsgBox? »
Shkutu, Inno названия заголовка и текст сообщения стандартных окон берет из языковых файлов isl, поэтому стоит воспользоваться секцией Messages. Например, меняем заголовок и текст диалового окна при выходе из инсталлятора:
[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl
[Messages]
ru.ExitSetupTitle=Выход
ru.ExitSetupMessage=Выйти?
текст сообщения стандартных окон берет из языковых файлов isl »
El Sanchez, текст сообщения - да. А вот что касается свойства Сaption у формы, выдаваемой MsgBox - я там такого не нашла, собственно, потому и спросила. Хотя может просто недостаточно внимательно искала.
El Sanchez
13-09-2013, 19:04
Shkutu, тю, до меня только сейчас дошло, что вам нужно :). Тогда используйте то, что ребята выше насоветовали.
Johny777
15-09-2013, 22:51
У меня вопрос
как например та же WinApi функция MessageBox(Ex) обрабатывает входные флаги?
вот например мы отправляем туда флаги := MB_ICONINFORMATION or MB_TASKMODAL or MB_CANCELTRYCONTINUE
or складывает эти значения, если не ошибаюсь. Получается новое. А каким макаром теперь из этого числа выдрать те 3 флага назад?
спрашиваю, потому что не понимаю, но хочу понять, тк поняв смогу использовать ( плагиатъ ) тот же подход для своих процедур/функций значительно укоротив при этом их прототипы
и просьба: у кого есть мануал, хорошая книга (посоветуйте пожалуйста), где для самых тупых описана побитавая работа с числами (shr shl xor) или момет мне кто тут всё объяснить?
для меня это темнейший лес и гугл не помогает, я до сих пор эту тему не жую :(
PS: Подозреваю эта тема имеет прямое отношение к моему пред. вопросу
UPD по первому вопросу понял, но к полному пониманию побитовых операций это не привело
http://teran.karelia.pro/articles/item_4464.html
Приветствую всех.
А где можно подробненько почитать, как создать инсталлятор, который сам обновляется с сети и подгружает свежие файлы?
Painkiller
16-09-2013, 21:40
Приветствую всех.
А где можно подробненько почитать, как создать инсталлятор, который сам обновляется с сети и подгружает свежие файлы? »
В шапке все есть
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC