Войти

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


Страниц : 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 126

TryRooM
23-02-2015, 00:33
roman_kudin@vk, Как скин прикрутить

[Files]
Source: "Tiger.cjstyles"; DestDir: {tmp}; Flags: dontcopy
Source: "ISSkin.dll"; DestDir: {tmp}; Flags: dontcopy
Source: "1.bmp"; DestName: "1.bmp"; Flags: dontcopy
Source: "2.bmp"; DestName: "2.bmp"; Flags: dontcopy

[ Code]
procedure LoadSkin(lpszPath: PAnsiChar; lpszIniFileName: PAnsiChar); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload';
procedure UnloadSkin; external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup: Boolean;
begin
ExtractTemporaryFile('isskin.dll');
ExtractTemporaryFile('Tiger.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
Result:=True;
end;

procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin;
end;

saneksanek
23-02-2015, 05:07
roman_kudin@vk, Собственно прикрутить к чему? https://yadi.sk/d/n-QxYlq8eqTzd думаю добавить сможете в свой основной код сами

palsn2000
23-02-2015, 15:26
kotyarko@fb, Большое спасибо за пример, всё заработало как надо.

В итоге для себя переделал в следующий вид (может кому-то тоже понадобится)


const
BASS_ACTIVE_STALLED = 2;
//Однократное воспроизведение сигнала о завершении установки
Procedure CurPageChanged(CurPageID: Integer);
var
mp3Name: string; i : Integer;

begin
if CurPageID = wpFinished then
begin
if BASS_Stop then //останавливаем музыку, которая играла до этого
begin
ExtractTemporaryFile('Complete.mp3'); //загружаем новую мелодию
mp3Name := ExpandConstant('{tmp}\Complete.mp3');
BASS_Init(-1, 44100, 0, 0, 0);
i := BASS_StreamCreateFile(FALSE, PAnsiChar(mp3Name), 0, 0, BASS_ACTIVE_STALLED);
BASS_Start();
BASS_SETVolume(70) // Уровень стартовой громкости (от 0 до 100)
BASS_ChannelPlay(i, False);
end;
end;
end;
//Однократное воспроизведение сигнала о завершении установки

roman_kudin@vk
23-02-2015, 18:15
И последнее, ребят как тут переместить кнопку "Browse" и строку вЬІбора адреса?

http://i.imgur.com/vGNpGAg.png

Dodakaedr
23-02-2015, 19:43
roman_kudin@vk, задайте параметры размещения таким элементам как WizardForm.DirEdit и WizardForm.DirBrowseButton
[setup]
AppName=MyProg
AppVerName=1.1
DefaultDirName={pf}\MyProg

[CODE]
procedure InitializeWizard();
begin
WizardForm.DirEdit.SetBounds(ScaleX(5), ScaleY(150), ScaleX(WizardForm.DirEdit.Width), ScaleY(WizardForm.DirEdit.Height));
WizardForm.DirBrowseButton.SetBounds(ScaleX(WizardForm.DirEdit.Width + 10), ScaleY(150), ScaleX(WizardForm.DirBrowseButton.Width), ScaleY(WizardForm.DirBrowseButton.Height));
end;

roman_kudin@vk
23-02-2015, 21:23
[setup]
AppName=MyProg
AppVerName=1.1
DefaultDirName={pf}\MyProg
[CODE]
procedure InitializeWizard();
begin
WizardForm.DirEdit.SetBounds(ScaleX(5), ScaleY(150), ScaleX(WizardForm.DirEdit.Width), ScaleY(WizardForm.DirEdit.Height));
WizardForm.DirBrowseButton.SetBounds(ScaleX(WizardForm.DirEdit.Width + 10), ScaleY(150), ScaleX(WizardForm.DirBrowseButton.Width), ScaleY(WizardForm.DirBrowseButton.Height));
end; »
Подскажите мне на будущее, просто хочу разобраться, где вЬІ берете код самой кнопки "Browse", точнее ее название?

И если я сделал скин, все отображаеться, все нормально, но.. CheckBox я сменил, вместо галочки у меня другой символ, при принятии соглашения лицензии работает, а при вЬІборе компонентов нет.

Dodakaedr
23-02-2015, 22:36
Подскажите мне на будущее, просто хочу разобраться, где вЬІ берете код самой кнопки "Browse", точнее ее название?
Сейчас просто знаю. А раньше так как я пользуюсь расширенной inno в редакторе форм при наведении курсора на элемент показывает его название.

ROMKA-1977
23-02-2015, 23:08
У кого есть исходник полного изменения вида инсталлятора, поделитесь пожалуйста. »
ты об этом?

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true
ShowTasksTreeLines=true

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

Name: Soft; Description: Установить дополнительное программное обеспечение; GroupDescription: Дополнительное программное обеспечение:; Flags: unchecked
Name: Soft/DirectX; Description: Установить Microsoft DirectX; Flags: unchecked
Name: Soft/vcredist_x86; Description: Установить Microsoft Visual С++ 2005 Redistributable; Flags: unchecked
Name: Soft/vcredist_x64; Description: Установить Microsoft Visual С++ 2005 Redistributable x64; Flags: unchecked; Check: IsWin64

[CustomMessages]
ru.WizardDeltaWidthInvalid=Прирост формы по ширине должен быть в диапазоне от %1 до %2
ru.WizardDeltaHeightInvalid=Прирост формы по высоте должен быть в диапазоне от %1 до %2
ru.WizardWidthInvalid=Ширина формы должна быть в диапазоне от 0 до %1
ru.WizardHeightInvalid=Высота формы должна быть в диапазоне от 0 до %1

[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
SPI_GETWORKAREA = $0030;

// Large Integer Functions
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';
// Configuration Reference
function SystemParametersInfo(uiAction, uiParam: UINT; var pvParam: TRect; fWinIni: UINT): BOOL; external 'SystemParametersInfo{#A}@user32.dll stdcall';

////////////////////////////////////////////////////////////////////////////
procedure RecreateWizardForm(const cx, cy: Longint; const IsDelta: Boolean);
// IsDelta : True - cx, cy is delta width/height, False - cx, cy is width/height
// cx......: delta width / width
// cy......: delta height / height
var
rt: TRect;
dx, dy: Longint;
begin
{ get deltas }
if not IsDelta then
begin
cx := cx - WizardForm.Width;
cy := cy - WizardForm.Height;
end;

{ check deltas }
if SystemParametersInfo(SPI_GETWORKAREA, 0, rt, 0) then
begin
{ check delta width }
if (cx < -WizardForm.Width) or (cx > rt.Right - WizardForm.Width) then
begin
if IsDelta then
MsgBox(FmtMessage(CustomMessage('WizardDeltaWidthInvalid'), [IntToStr(-WizardForm.Width), IntToStr(rt.Right - WizardForm.Width)]), mbError, MB_OK)
else
MsgBox(FmtMessage(CustomMessage('WizardWidthInvalid'), [IntToStr(rt.Right)]), mbError, MB_OK);
Exit;
end;

{ check delta height }
if (cy < -WizardForm.Height) or (cy > rt.Bottom - WizardForm.Height) then
begin
if IsDelta then
MsgBox(FmtMessage(CustomMessage('WizardDeltaHeightInvalid'), [IntToStr(-WizardForm.Height), IntToStr(rt.Bottom - WizardForm.Height)]), mbError, MB_OK)
else
MsgBox(FmtMessage(CustomMessage('WizardHeightInvalid'), [IntToStr(rt.Bottom)]), mbError, MB_OK);
Exit;
end;
end;

{ WizardForm }
with WizardForm do
begin
{ WizardForm }
Width := Width + cx;
Height := Height + cy;

{ buttons }
CancelButton.Left := CancelButton.Left + cx;
CancelButton.Top := CancelButton.Top + cy;
NextButton.Left := NextButton.Left + cx;
NextButton.Top := NextButton.Top + cy;
BackButton.Left := BackButton.Left + cx;
BackButton.Top := BackButton.Top + cy;

{ common }
OuterNotebook.ClientWidth := ClientWidth;
OuterNotebook.ClientHeight := OuterNotebook.ClientHeight + cy;
InnerNotebook.Width := InnerNotebook.Width + cx;
InnerNotebook.Height := InnerNotebook.Height + cy;
MainPanel.ClientWidth := ClientWidth;
WizardSmallBitmapImage.Left := WizardSmallBitmapImage.Left + cx;
PageNameLabel.Width := PageNameLabel.Width + cx;
PageDescriptionLabel.Width := PageDescriptionLabel.Width + cx;
Bevel1.Width := Bevel1.Width + cx;
Bevel.Width := Bevel.Width + cx;
Bevel.Top := Bevel.Top + cy;
BeveledLabel.Top := BeveledLabel.Top + cy;

{ wpWelcome }
dx := MulDiv(cy, WizardBitmapImage.Width, WizardBitmapImage.Height);
WizardBitmapImage.Width := WizardBitmapImage.Width + dx;
WizardBitmapImage.Height := WizardBitmapImage.Height + cy;
WelcomeLabel1.Left := WelcomeLabel1.Left + dx;
WelcomeLabel1.Width := WelcomeLabel1.Width + cx - dx;
dy := WelcomeLabel1.Height;
WelcomeLabel1.AdjustHeight;
dy := WelcomeLabel1.Height - dy;
WelcomeLabel2.Top := WelcomeLabel2.Top + dy;
WelcomeLabel2.Left := WelcomeLabel2.Left + dx;
WelcomeLabel2.Width := WelcomeLabel2.Width + cx - dx;
WelcomeLabel2.AdjustHeight;

{ wpLicense }
LicenseLabel1.Width := LicenseLabel1.Width + cx;
dy := LicenseLabel1.Height;
LicenseLabel1.AdjustHeight;
dy := LicenseLabel1.Height - dy;
LicenseMemo.Top := LicenseMemo.Top + dy;
LicenseMemo.Width := LicenseMemo.Width + cx;
LicenseMemo.Height := LicenseMemo.Height + cy - dy;
LicenseAcceptedRadio.Top := LicenseAcceptedRadio.Top + cy;
LicenseAcceptedRadio.Width := LicenseAcceptedRadio.Width + cx;
LicenseNotAcceptedRadio.Top := LicenseNotAcceptedRadio.Top + cy;
LicenseNotAcceptedRadio.Width := LicenseNotAcceptedRadio.Width + cx;

{ wpPassword }
PasswordLabel.Width := PasswordLabel.Width + cx;
dy := PasswordLabel.Height;
PasswordLabel.AdjustHeight;
dy := PasswordLabel.Height - dy;
PasswordEditLabel.Top := PasswordEditLabel.Top + dy;
PasswordEditLabel.Width := PasswordEditLabel.Width + cx;
PasswordEdit.Top := PasswordEdit.Top + dy;
PasswordEdit.Width := PasswordEdit.Width + cx;

{ wpInfoBefore }
InfoBeforeClickLabel.Width := InfoBeforeClickLabel.Width + cx;
dy := InfoBeforeClickLabel.Height;
InfoBeforeClickLabel.AdjustHeight;
dy := InfoBeforeClickLabel.Height - dy;
InfoBeforeMemo.Top := InfoBeforeMemo.Top + dy;
InfoBeforeMemo.Width := InfoBeforeMemo.Width + cx;
InfoBeforeMemo.Height := InfoBeforeMemo.Height + cy - dy;

{ wpUserInfo }
UserInfoNameLabel.Width := UserInfoNameLabel.Width + cx;
UserInfoNameEdit.Width := UserInfoNameEdit.Width + cx;
UserInfoOrgLabel.Width := UserInfoOrgLabel.Width + cx;
UserInfoOrgEdit.Width := UserInfoOrgEdit.Width + cx;
UserInfoSerialLabel.Width := UserInfoSerialLabel.Width + cx;
UserInfoSerialEdit.Width := UserInfoSerialEdit.Width + cx;

{ wpSelectDir }
SelectDirLabel.Width := SelectDirLabel.Width + cx;
SelectDirLabel.AdjustHeight;
SelectDirBrowseLabel.Width := SelectDirBrowseLabel.Width + cx;
dy := SelectDirBrowseLabel.Height;
SelectDirBrowseLabel.AdjustHeight;
dy := SelectDirBrowseLabel.Height - dy;
DirEdit.Top := DirEdit.Top + dy;
DirEdit.Width := DirEdit.Width + cx;
DirBrowseButton.Top := DirBrowseButton.Top + dy;
DirBrowseButton.Left := DirBrowseButton.Left + cx;
DiskSpaceLabel.Width := DiskSpaceLabel.Width + cx;
dy := DiskSpaceLabel.Height;
DiskSpaceLabel.AdjustHeight;
dy := DiskSpaceLabel.Height - dy;
DiskSpaceLabel.Top := DiskSpaceLabel.Top + cy - dy;

{ wpSelectComponents }
SelectComponentsLabel.Width := SelectComponentsLabel.Width + cx;
dy := SelectComponentsLabel.Height;
SelectComponentsLabel.AdjustHeight;
dy := SelectComponentsLabel.Height - dy;
TypesCombo.Top := TypesCombo.Top + dy;
TypesCombo.Width := TypesCombo.Width + cx;
ComponentsList.Top := ComponentsList.Top + dy;
ComponentsList.Width := ComponentsList.Width + cx;
ComponentsList.Height := ComponentsList.Height + cy - dy;
ComponentsDiskSpaceLabel.Width := ComponentsDiskSpaceLabel.Width + cx;
dy := ComponentsDiskSpaceLabel.Height;
ComponentsDiskSpaceLabel.AdjustHeight;
dy := ComponentsDiskSpaceLabel.Height - dy;
ComponentsDiskSpaceLabel.Top := ComponentsDiskSpaceLabel.Top + cy - dy;

{ wpSelectProgramGroup }
SelectStartMenuFolderLabel.Width := SelectStartMenuFolderLabel.Width + cx;
SelectStartMenuFolderLabel.AdjustHeight;
SelectStartMenuFolderBrowseLabel.Width := SelectStartMenuFolderBrowseLabel.Width + cx;
dy := SelectStartMenuFolderBrowseLabel.Height;
SelectStartMenuFolderBrowseLabel.AdjustHeight;
dy := SelectStartMenuFolderBrowseLabel.Height - dy;
GroupEdit.Top := GroupEdit.Top + dy;
GroupEdit.Width := GroupEdit.Width + cx;
GroupBrowseButton.Top := GroupBrowseButton.Top + dy;
GroupBrowseButton.Left := GroupBrowseButton.Left + cx;
NoIconsCheck.Top := NoIconsCheck.Top + cy;
NoIconsCheck.Width := NoIconsCheck.Width + cx;

{ wpSelectTasks }
SelectTasksLabel.Width := SelectTasksLabel.Width + cx;
dy := SelectTasksLabel.Height;
SelectTasksLabel.AdjustHeight;
dy := SelectTasksLabel.Height - dy;
TasksList.Top := TasksList.Top + dy;
TasksList.Width := TasksList.Width + cx;
TasksList.Height := TasksList.Height + cy - dy;

{ wpReady }
ReadyLabel.Width := ReadyLabel.Width + cx;
dy := ReadyLabel.Height;
ReadyLabel.AdjustHeight;
dy := ReadyLabel.Height - dy;
ReadyMemo.Top := ReadyMemo.Top + dy;
ReadyMemo.Width := ReadyMemo.Width + cx;
ReadyMemo.Height := ReadyMemo.Height + cy - dy;

{ wpPreparing }
PreparingLabel.Width := PreparingLabel.Width + cx;
PreparingMemo.Width := PreparingMemo.Width + cx;
PreparingMemo.Height := PreparingMemo.Height + cy;

{ wpInstalling }
StatusLabel.Width := StatusLabel.Width + cx;
FilenameLabel.Width := FilenameLabel.Width + cx;
ProgressGauge.Width := ProgressGauge.Width + cx;

{ wpInfoAfter }
InfoAfterClickLabel.Width := InfoAfterClickLabel.Width + cx;
dy := InfoAfterClickLabel.Height;
InfoAfterClickLabel.AdjustHeight;
dy := InfoAfterClickLabel.Height - dy;
InfoAfterMemo.Top := InfoAfterMemo.Top + dy;
InfoAfterMemo.Width := InfoAfterMemo.Width + cx;
InfoAfterMemo.Height := InfoAfterMemo.Height + cy - dy;

{ wpFinished }
WizardBitmapImage2.Width := WizardBitmapImage2.Width + dx;
WizardBitmapImage2.Height := WizardBitmapImage2.Height + cy;
FinishedHeadingLabel.Left := FinishedHeadingLabel.Left + dx;
FinishedHeadingLabel.Width := FinishedHeadingLabel.Width + cx - dx;
dy := FinishedHeadingLabel.Height;
FinishedHeadingLabel.AdjustHeight;
dy := FinishedHeadingLabel.Height - dy;
FinishedLabel.Top := FinishedLabel.Top + dy;
FinishedLabel.Left := FinishedLabel.Left + dx;
FinishedLabel.Width := FinishedLabel.Width + cx - dx;
FinishedLabel.AdjustHeight;
RunList.Left := RunList.Left + dx;
RunList.Width := RunList.Width + cx - dx;
dy := RunList.Top;
RunList.Top := FinishedPage.Height - RunList.Height;
dy := RunList.Top - dy;
YesRadio.Top := YesRadio.Top + dy;
YesRadio.Left := YesRadio.Left + dx;
YesRadio.Width := YesRadio.Width + cx - dx;
NoRadio.Top := NoRadio.Top + dy;
NoRadio.Left := NoRadio.Left + dx;
NoRadio.Width := NoRadio.Width + cx - dx;

{ new position }
Center;
end;
end;

///////////////////////////
procedure InitializeWizard;
begin
RecreateWizardForm(150, 50, True);
end;

Оформеление картинками и скином думаю прикрутиш.

roman_kudin@vk
23-02-2015, 23:32
Ну я с этим разобрался. Спасибо. Но проблемка с CheckBox`ом. При выборе компонентов, он не изменяеться, хотя в скине я его сменил и при лицензтонном соглашении работает, а вот при выборе компонентов не хочет, просто галочка.

El Sanchez
24-02-2015, 15:04
Но проблемка с CheckBox`ом. При выборе компонентов, он не изменяеться, хотя в скине я его сменил и при лицензтонном соглашении работает, а вот при выборе компонентов не хочет, просто галочка. »
roman_kudin@vk, а CheckListBox это не список CheckBox-ов, как вы думаете, а список текстовых строк с нарисованными рядом изображениями галок или кружочков. И изображения эти берутся не из файла темы, а из стокового виндового изображения OBM_CHECKBOXES Не, вру, метрики галки/кружочка из OBM_CHECKBOXES, а изображение из темы, хотя это тупо - метрики стокового изображения и изображения из темы могут не совпадать. В расширенной версии для видоизменения галок можете использовать функции LoadBtnBmpFromBitmap/LoadBtnBmpFromFile со своим файлом, пример лежит в Examples, файл btnimage.bmp. Состояния галок и кружочков можно выдрать из скина и сделать подобный файл.

roman_kudin@vk
24-02-2015, 16:56
Спасибо, попробую.

jack_nuclear
25-02-2015, 01:09
Помогите с ISTask.dll. Где взять новые версии? Чем сейчас заменяют "завершалки процессов"? Ткните носом, если говорилось.

Nordek
25-02-2015, 08:07
Помогите с ISTask.dll. Где взять новые версии? »ISTask 1.0.1.0 (http://krinkels.org/resources/istask.100/). Версия 1.0.1.0 является последней.

Чем сейчас заменяют »
Простой вариант:
[Run]
Filename: {sys}\taskkill.exe; Parameters: /F /IM calc.exe; Flags: runhidden

jack_nuclear
25-02-2015, 12:28
Простой вариант: »
А как на это вывести окно "приложение запущено, закрыть?". Через ISTask легко =) А как тут реализовать?

kotyarko@fb
25-02-2015, 12:29
Через ISTask легко А как тут реализовать? »
А чем ISTask не устраивает?

jack_nuclear
25-02-2015, 12:48
Цитата kotyarko@fb:
А чем ISTask не устраивает? »
УЖе устраивает. Заработало.

jack_nuclear
25-02-2015, 16:32
kotyarko@fb, У меня вопрос по твоему скрипту PlaySound.iss Воспроизводиться на всех компонентах, а не на конкретных. Help!

[Setup]
RawDataResource=SndA:bugreporter_succeeded.wav |SndB:WindowsLogoffSound.wav

[Code ]
#define A = (Defined UNICODE) ? "W" : "A"

type
HINST = THandle;
HMODULE = HINST;
Pointer = Longint;
HRSRC = THandle;
HGLOBAL = THandle;

const
SND_ASYNC = $0001;
SND_NODEFAULT = $0002;
SND_MEMORY = $0004;
RT_RCDATA = 10;


function sndPlaySound(lpszSoundName: Pointer; uFlags: UINT): BOOL; external 'sndPlaySound{#A}@Winmm.dll stdcall';
function LoadResource(hModule: HINST; hResInfo: HRSRC): HGLOBAL; external 'LoadResource@kernel32.dll stdcall';
function FindResource(hModule: HMODULE; lpName: String; lpType: Longint): HRSRC; external 'FindResource{#A}@kernel32.dll stdcall';
function LockResource(hResData: HGLOBAL): Pointer; external 'LockResource@kernel32.dll stdcall';

var
pSoundMemory_A, pSoundMemory_B: Pointer;

function GetResourceSoundAddr(const ResourceName: String): Pointer;
var
hResourceSound: HRSRC;
begin
hResourceSound := FindResource(HInstance, ResourceName, RT_RCDATA);
Result := LockResource(LoadResource(HInstance, hResourceSound));
end;

procedure ComponentsOnClickCheck(Sender: TObject);
begin
if IsComponentSelected('KMP\AB') then
begin
sndPlaySound(pSoundMemory_B, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
if IsComponentSelected('KMP\ZK') then
begin
sndPlaySound(pSoundMemory_A, SND_MEMORY or SND_NODEFAULT or SND_ASYNC);
end;
end;

procedure InitializeWizard4();
begin
pSoundMemory_A := GetResourceSoundAddr('_IS_SNDA');
pSoundMemory_B := GetResourceSoundAddr('_IS_SNDB');

WizardForm.ComponentsList.OnClickCheck := @ComponentsOnClickCheck;
end;

Dodakaedr
25-02-2015, 17:44
А как на это вывести окно "приложение запущено, закрыть?". Через ISTask легко А как тут реализовать? »
Как вариант [Setup]
AppName=Test
AppVersion=1.1
DefaultDirName={pf}\Test

[Code]
function CheckAppRun: boolean;
var
i: integer;
begin
if FindWindowByWindowName('Калькулятор') = 0 then
Result:= True
else if MsgBox('Закрыть калькулятор?', mbError, MB_YESNO) = idyes then begin
Exec(ExpandConstant('{sys}\taskkill.exe'), ' /F /IM calc.exe', '', SW_HIDE, ewWaitUntilTerminated, i);
Result := True;
end;
end;

function InitializeSetup(): Boolean;
begin
Result := CheckAppRun;
end;

jack_nuclear
25-02-2015, 17:49
Цитата Dodakaedr:
Как вариант »

Спасибо. Лучше без дллок =). Чем будет отличатся реализация через dll и через системный тасккилл? Что "лучше"? Или одинаково? Мб проблем будет меньше где-то.

kotyarko@fb
25-02-2015, 19:26
kotyarko@fb, У меня вопрос по твоему скрипту PlaySound.iss Воспроизводиться на всех компонентах, а не на конкретных. Help! »
Это как бы не мой скрипт. Вот (http://krinkels.org/threads/ozuchivanie-komponentov.2429/#post-22951) подходящий вариант.




© OSzone.net 2001-2012