Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]
Dodakaedr, например, передать параметром комстроки. Если говорить об инсталяторах созданных в инно, то в них за это отвечает параметр /DIR. Например /DIR="С:\Программа"
Dodakaedr
06-10-2014, 23:58
передать параметром комстроки »
Я тоже думал об этом, надо попробовать.
Dodakaedr
07-10-2014, 00:19
Как правильно указать путь? Так не получается Exec(ExpandConstant('{tmp}\MyOLDRepack.exe'), '/verysilent /d=' +ExpandConstant('{app}'), '', 0, ewWaitUntilTerminated, rcode);
ROMKA-1977
07-10-2014, 00:19
Подскажите пожалуйста код озвучки кнопок для стандартного компилятора.
Хочу приклеить левый установщик к своему. »
Например так из секции [Run] для NSIS:
[Run]
Filename: {src}\FreeArc-0.67-alpha-win32.exe; Parameters: /D={app}; Flags: skipifdoesntexist
Установка будет произведена в ту же папку, куда будет производиться установка из основного инсталлятора.
Dodakaedr
07-10-2014, 00:27
Например так из секции [Run] »
из [Run] не подходит, нужно запустить левый инсталлятор до начала распаковки своих файлов.
Подскажите пожалуйста код озвучки кнопок для стандартного компилятора. »
А не тебе ли я случаем давал пример озвучки кнопок, и даже DirBrowseButton?
МИШАНЧИК
07-10-2014, 06:05
Подскажите пожалуйста как внести в реестр через секцию code
Root: HKLM; SubKey: SOFTWARE\Classes\batfile\shell\edit\command; ValueType: expandsz; ValueData: %SystemRoot%\SysWow64\NOTEPAD.EXE %1;
Dodakaedr
07-10-2014, 07:54
Подскажите пожалуйста как внести в реестр через секцию code »
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssDone:
begin
RegWriteExpandStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\batfile\shell\edit\command', '', '%SystemRoot%\SysWow64\NOTEPAD.EXE %1');
end;
end;
end;
R.i.m.s.k.y.
07-10-2014, 09:13
Как правильно указать путь? Так не получается »
кмк про пробелы забыл, у тебя все склеивается, dir а не d, ну и 0 не к месту, может и кавычки надо добавить
Exec(ExpandConstant('{tmp}\MyOLDRepack.exe'), ' /verysilent /DIR=' + '"' + ExpandConstant('{app}') + '"', Exec(ExpandConstant('{tmp}'), ewWaitUntilTerminated, rcode);
МИШАНЧИК
07-10-2014, 09:17
Dodakaedr, большое спасибо. А если несколько значений нужно внести, они просто пойдут подряд?
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssDone:
begin
RegWriteExpandStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\batfile\shell\edit\command', '', '%SystemRoot%\SysWow64\NOTEPAD.EXE %1');
RegWriteExpandStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\cmdfile\shell\edit\command', '', '%SystemRoot%\SysWow64\NOTEPAD.EXE %1');
RegWriteExpandStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\infile\shell\edit\command', '', '%SystemRoot%\SysWow64\NOTEPAD.EXE %1');
end;
end;
end;
Или нет?
R.i.m.s.k.y.
07-10-2014, 09:18
А если несколько значений нужно внести, они просто пойдут подряд? »
да
инно при установке выполняет скрипт в секции сверху вниз, при удалении наоборот - снизу вверх
ROMKA-1977
07-10-2014, 09:20
А не тебе ли я случаем давал пример озвучки кнопок, и даже DirBrowseButton? »
nik1967, Если ты об этом коде:
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[Files]
Source: click.wav; DestDir: {tmp}; Flags: dontcopy;
[Code]
var
DirButtonClick: TNotifyEvent;
GroupButtonClick: TNotifyEvent;
function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';
function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('click.wav');
Result := True;
end;
function NextButtonClick(CurPageID: Integer): Boolean;
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
Result := True;
end;
function BackButtonClick(CurPageID: Integer): Boolean;
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
Result := True;
end;
procedure DirBrowseButtonClick(Sender: TObject);
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
DirButtonClick(Sender);
end;
procedure GroupBrowseButtonClick(Sender: TObject);
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
GroupButtonClick(Sender);
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
end;
procedure InitializeWizard();
begin
with WizardForm.DirBrowseButton do begin
DirButtonClick := OnClick;
OnClick:= @DirBrowseButtonClick;
end;
with WizardForm.GroupBrowseButton do begin
GroupButtonClick := OnClick;
OnClick := @GroupBrowseButtonClick;
end;
end;
то всё OK! Хотелось бы наложить озвучки при наведении и нажатии на кнопки (для стандартного компилятора).
Есть такой пример:
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
LicenseFile=compiler:License.txt
[Files]
Source: UI\buttonclick.WAV; Flags: dontcopy
Source: UI\buttonclickrelease.WAV; Flags: dontcopy
Source: UI\buttonrollover.WAV; Flags: dontcopy
[Code]
function sndPlaySound(lpszSoundName: AnsiString; uFlags: cardinal): Integer;
external 'sndPlaySoundA@winmm.dll stdcall'; /// функция проигрывания звука
procedure PlaySoundOnEnter(Sender: TObject); /// процедура при наведении
begin
sndPlaySound(ExpandConstant('{tmp}\buttonrollover.WAV'),$0001);
end;
procedure PlaySoundOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); /// при нажатии кнопки
begin
sndPlaySound(ExpandConstant('{tmp}\buttonclick.WAV'),$0001);
end;
procedure PlaySoundOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); /// при отпускании кнопки
begin
sndPlaySound(ExpandConstant('{tmp}\buttonclickrelease.WAV'),$0001);
end;
procedure InitializeWizard;
begin
ExtractTemporaryFile('buttonclick.WAV'); /// функцией ExtractTemporaryFile извлекаем файл во временную папку - при нажатии кнопри паши по контролу (не путать с кликом)
ExtractTemporaryFile('buttonclickrelease.WAV'); /// при отпускании кнопки мыши с контрола
ExtractTemporaryFile('buttonrollover.WAV'); /// при наведении
with WizardForm do
begin
with NextButton do
begin
OnMouseEnter := @PlaySoundOnEnter;
OnMouseDown := @PlaySoundOnMouseDown;
OnMouseUp := @PlaySoundOnMouseUp;
end;
with BackButton do
begin
OnMouseEnter := NextButton.OnMouseEnter;
OnMouseDown := NextButton.OnMouseDown;
OnMouseUp := NextButton.OnMouseUp;
end;
with CancelButton do
begin
OnMouseEnter := NextButton.OnMouseEnter;
OnMouseDown := NextButton.OnMouseDown;
OnMouseUp := NextButton.OnMouseUp;
end;
with DirBrowseButton do
begin
OnMouseEnter := NextButton.OnMouseEnter;
OnMouseDown := NextButton.OnMouseDown;
OnMouseUp := NextButton.OnMouseUp;
end;
with GroupBrowseButton do
begin
OnMouseEnter := NextButton.OnMouseEnter;
OnMouseDown := NextButton.OnMouseDown;
OnMouseUp := NextButton.OnMouseUp;
end;
end;
end;
но в стандартной версии компилятора он неработает. Возможно его можна переписать?
R.i.m.s.k.y.
07-10-2014, 09:23
МИШАНЧИК, и эта
вносить в HKLM\Software\classes - моветон, если запорешь - вся секция classes для всех пользователей пойдет по крыму
вносить нужно в HKCR
RegWriteExpandStringValue(HKCR, 'batfile\shell\edit\command', '', '%SystemRoot%\SysWow64\NOTEPAD.EXE %1');
El Sanchez
07-10-2014, 10:13
А если несколько значений нужно внести, они просто пойдут подряд? »
инно при установке выполняет скрипт в секции сверху вниз, при удалении наоборот - снизу вверх »
R.i.m.s.k.y., пиши, что именно в секции Registry, а то можно подумать, что такое поведение и в секции Code тоже есть.
МИШАНЧИК, на x86-системах с приведенным кодом все плохо будет. Ну нет там подсистемы WoW64.
вносить в HKLM\Software\classes - моветон, если запорешь - вся секция classes для всех пользователей пойдет по крыму
вносить нужно в HKCR »
R.i.m.s.k.y., вообще-то, наоборот.
МИШАНЧИК
07-10-2014, 10:29
R.i.m.s.k.y., спасибо. А чем отличаются:
RegWriteExpandStringValue
от просто
RegWriteStringValue
El Sanchez
07-10-2014, 11:42
А чем отличаются: »
МИШАНЧИК, RegWriteExpandStringValue пишет в реестр параметр со строковым типом REG_EXPAND_SZ. Значения такого типа обычно содержат какие-либо системные переменные, например, %SystemRoot%, которые при чтении такого значения будут раскрыты системой. RegWriteStringValue пишет параметр со строковым типом REG_SZ. Значения типа трактуются в литеральном представлении, просто строка.
как внести в реестр через секцию code »
RegWriteExpandStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\batfile\shell\edit\command', '', '%SystemRoot%\SysWow64\NOTEPAD.EXE %1'); »
Чтоб не возникло проблем с 32х битной системой, правильно будет записать так:
RegWriteExpandStringValue(HKLM, 'SOFTWARE\Classes\batfile\shell\edit\command', '', ExpandConstant('{sys}\NOTEPAD.EXE %1'));
МИШАНЧИК
07-10-2014, 12:59
Всем спасибо.
А когда добавляешь в реестр не через секцию code, а просто в скрипте обязательно столько кавычек?
Root: HKCR; SubKey: batfile\shell\edit\command; ValueType: string; ValueData: """{sys}\NOTEPAD.EXE"" ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty
или можно
Root: HKCR; SubKey: batfile\shell\edit\command; ValueType: string; ValueData: {sys}\NOTEPAD.EXE %1; Flags: uninsdeletevalue uninsdeletekeyifempty
dracosha
07-10-2014, 13:08
МИШАНЧИК, да кавычки нужны обязательно
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC