PDA

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


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

Vista-w
25-08-2012, 18:34
Ivan_009,
какой я не внимательный)) спс

Ivan_009
26-08-2012, 20:42
Извиняюсь за тупой вопрос но если у меня компилятор ANSI в этой строке, что нужно поставить, чтобы не использовать...
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

Johny777
26-08-2012, 20:45
Ivan_009,
если юникод то А - W
в противном случае (только ANSI) A - A

Raf-9600
27-08-2012, 13:41
Ктонить может написать простенький скриптик, который в случае если выбран компонент "Game\Lokal" и нажата кнопка «Далее», проверял, существует ли ключ реестра "InstallPath" в ветке "HKLM\SOFTWARE\Blizzard Entertainment\Diablo II\" если ключ найден, то проверял по указанному в этом ключе реестра пути, существование файлов "Game.exe" и "d2data.mpq". Если всё найдено, то молча переходить на следующую страницу, если же файлы или ключ в реестре не найден, то выводить сообщение с кнопками «Да» и «Нет», на которые невозможно нажать в течение 10 секунд. По умолчанию выбрана кнопка «Да», и при нажатии на неё автоматически выбирался компонент "Game\Full" и осуществлялся автоматический переход на следующую страницу, если же нажать на «Нет» то осуществлялся переход на следующую страницу без дополнительных действий.

Johny777
27-08-2012, 15:00
Raf-9600,


[Setup]
AppName=My program
AppVerName=My program 1.5
DefaultDirName={pf}\My program
AppId=The_Best_AppId_Ever_Made

[Components]
Name: Game; Description: Game_Component;
Name: Game\Lokal; Description: Game_Local_Component; Flags: exclusive
Name: Game\Full; Description: Game_Full_Component; Flags: exclusive


[Files]
Source: Game.exe; DestDir: {app}
Source: d2data.mpq; DestDir: {app}


[code]
var
Error_Form: TSetupForm;
No_Clicked: boolean;

function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord; external 'GetSystemMenu@user32.dll stdcall';
function DeleteMenu(hMenu: LongWord; uPosition, uFlags: UINT): BOOL; external 'DeleteMenu@user32.dll stdcall';
function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';


procedure Error_Form_Button_OnClick(Sender: TObject);
begin
case TButton(Sender).Caption of

SetupMessage(msgButtonYes):
begin
with WizardForm do
begin
ComponentsList.Checked[2] := True; /// где 2 - индекс компонета - 3-й по списку (отсчёт от 0)
Enabled := True;
NextButton.OnClick(nil);
end;
end;

SetupMessage(msgButtonNo):
begin
with WizardForm do
begin
Enabled := True;
No_Clicked := True;
NextButton.OnClick(nil);
end;
end;
end;

Error_Form.Hide;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
AppPath: String;
Cycle: Integer;
NO_Button, YES_Button: TButton;
begin
Result := True;
AppPath := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSe tting("AppID")}_is1,InstallLocation|}'));

if (CurPageID = wpSelectComponents) and IsComponentSelected('Game\Lokal') then
begin
if not FileExists(AppPath + 'Game.exe') and not FileExists(AppPath + 'd2data.mpq') and not No_Clicked then
begin
Result := False;
WizardForm.Enabled := False;

Error_Form := CreateCustomForm;
with Error_Form do
begin
Position := poScreenCenter;
BorderStyle := bsDialog;
ClientWidth := ScaleX(250);
ClientHeight := ScaleY(100);
Caption := SetupMessage(msgErrorTitle);
Color := clBtnFace;
DeleteMenu(GetSystemMenu(Error_Form.Handle,False), $F060,0); /// сделать кнопку "закрыть" неактивной
SetClassLong(Error_Form.Handle, -26, GetClassLong(Error_Form.Handle, -26) or $200); /// блокировка комбинации alt + f4

with TLabel.Create(nil) do
begin
SetBounds(ScaleX(15), ScaleY(10), ScaleX(290), ScaleY(30));
AutoSize := False;
Caption := 'будет выбран компнент Game_Full';
WordWrap := True;
Parent := Error_Form;
Font.Size := 9;
end;

YES_Button := TButton.Create(nil)
with YES_Button do
begin
Caption := SetupMessage(msgButtonYes);
Parent := Error_Form;
SetBounds(Error_Form.Width - ScaleX(90), ScaleY(65), ScaleX(71), ScaleY(25));
Cursor := crHand;
Enabled := False;
OnClick := @Error_Form_Button_OnClick;
end;

NO_Button := TButton.Create(nil)
with NO_Button do
begin
Caption := SetupMessage(msgButtonNo);
Parent := Error_Form;
SetBounds(Error_Form.Width - ScaleX(175), ScaleY(65), ScaleX(71), ScaleY(25));
Cursor := crHand;
Enabled := False;
OnClick := @Error_Form_Button_OnClick;
end;

Application.Title := ' ' + SetupMessage(msgErrorTitle);

Show;
Repaint;

Cycle := 10;

repeat
begin
Sleep(1000);
Cycle := Cycle - 1;
Error_Form.Caption := IntToStr(Cycle) + ' Секунд';
end;
until (Cycle = 0)


YES_Button.Enabled := True;
NO_Button.Enabled := True;
end;

end;
end;
end;

procedure InitializeWizard();
begin
No_Clicked := False;
end;

Twoface
27-08-2012, 16:00
Друзья помогите, кто нибудь прикрутите пожалуйста ISDone и если не сложно то сделайте кликабельное лого без фона.

Вот скрипт: http://rghost.ru/40017592

nik1967
27-08-2012, 17:10
Raf-9600, Johny777, [Setup]
AppName=My program
AppVerName=My program 1.5
DefaultDirName={pf}\My program

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: Game; Description: Game_Component;
Name: Game\Lokal; Description: Game_Local_Component; Flags: exclusive; Types: full;
Name: Game\Full; Description: Game_Full_Component; Flags: exclusive;

[Files]
Source: Game.exe; DestDir: {app};
Source: d2data.mpq; DestDir: {app};

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Blizzard Entertainment"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Blizzard Entertainment\Diablo II"; ValueName: "InstallPath"; ValueType: String; ValueData: "{app}\"; Flags: uninsdeletekey

[_Code]
function NextButtonClick(CurPageID: Integer): Boolean;
var
AppPath: String;
begin
Result:= true;
AppPath:= RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Blizzard Entertainment\Diablo II\,InstallPath|}'));
if (CurPageID = wpSelectComponents) and IsComponentSelected('Game\Lokal') then
if not FileExists(AppPath + 'Game.exe') and not FileExists(AppPath + 'd2data.mpq') then
if MsgBoxEx(0, 'Не найдены Game.exe и d2data.mpq'+#13#10+'Установить Game_Full_Component?', 'Проблема', MB_YESNO or MB_ICONQUESTION, 0, 10) = IDYES then
WizardForm.ComponentsList.Checked[2]:= True /// где 2 - индекс компонета - 3-й по списку (отсчёт от 0)
else
WizardForm.ComponentsList.Checked[1]:= True; /// где 1 - индекс компонета - 2-й по списку (отсчёт от 0)
end;

Raf-9600
27-08-2012, 17:21
nik1967, Если бы можно было сделать чтобы возможность нажать на Да\Нет появлялась только через 10 секунд, тогда было бы в самом деле лучше.

Johny777, Благодарю http://www.kolobok.us/smiles/light_skin/good.gif

alert30
27-08-2012, 17:24
Twoface, не умеешь сам?

Twoface
27-08-2012, 17:28
alert30 »
Пытался, подключил, но выходила ошибка, музыку и сплаш сам подключил, а вот ISDone не получается без ошибки и лого получается с фоном, уже голову сломал, если сможешь помочь, помоги пожалуйста, в любом случае спасибо что откликнулся.

alert30
27-08-2012, 17:42
Twoface, не пользовался Inno Setup Joiner?

Twoface
27-08-2012, 18:20
Inno Setup Joiner »
Нет. Делал всё руками.

Raf-9600
27-08-2012, 18:37
А можно ли программно изменить путь установки? Ну в смысле сменить содержимое {app}?

alert30
27-08-2012, 18:40
Twoface, руками так же как бы правильно пользуюся, вот только сколько дублей выдает; тем самым и выдает ошибку. Попробуй эту утилиту, и отпишись результаты.

Twoface
27-08-2012, 18:51
alert30 »
Прости, а как ею вообще пользоваться, вернее сказать как её запустить то, там просто .EXE файл.

Ivan_009
27-08-2012, 19:03
Twoface, так

Twoface
27-08-2012, 19:24
Ivan_009 Ivan_009 сейчас на форуме »

Не могу не через командную строчку не через Експловер запустить.

Ivan_009
27-08-2012, 19:43
Twoface, Для начала установи InnoUltra
http://innoultra.ru/?p=1

Twoface
27-08-2012, 19:49
Ivan_009 »
Готово. Теперь что нужно сделать, научи пожалуйста.

Ivan_009
27-08-2012, 19:56
Twoface,
После чего, в проводнике выделяем подготовленные скрипты, и в контекстном меню выбираем Join Scripts.
И все :drug:




© OSzone.net 2001-2012