PDA

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 7]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 [89] 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

saurn
06-10-2014, 23:49
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
Подскажите пожалуйста код озвучки кнопок для стандартного компилятора.

Nordek
07-10-2014, 00:25
Хочу приклеить левый установщик к своему. »
Например так из секции [Run] для NSIS:
[Run]
Filename: {src}\FreeArc-0.67-alpha-win32.exe; Parameters: /D={app}; Flags: skipifdoesntexist
Установка будет произведена в ту же папку, куда будет производиться установка из основного инсталлятора.

Dodakaedr
07-10-2014, 00:27
Например так из секции [Run] »
из [Run] не подходит, нужно запустить левый инсталлятор до начала распаковки своих файлов.

nik1967
07-10-2014, 03:43
Подскажите пожалуйста код озвучки кнопок для стандартного компилятора. »
А не тебе ли я случаем давал пример озвучки кнопок, и даже 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. Значения типа трактуются в литеральном представлении, просто строка.

Serega
07-10-2014, 12:11
как внести в реестр через секцию 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