Скрипты Inno Setup. Помощь и советы [часть 5]

Ответить
 • Просмотры: 26
Аватара пользователя
sergey3695

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение sergey3695 »

alert30, EvilAlex,





код:


читать дальше »




Код:

Код: Выделить всё

[Setup]
AppName=777
AppVerName=777
DefaultDirname=C:\Program Files (x86)\Source Engine 15\common\half-life 2\platform
Compression=none
[Files]
Source: C:\Program Files (x86)\Source Engine 15\common\half-life 2\hl2\maps\*; DestDir: {app}; BeforeInstall: BetterInfo();
[code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif
const
  MAX_PATH = 260;
  PATH_LEN = 69;
var
  hInfoPath, hInfoFile: HWND;
function SetWindowText(hWnd: HWND; lpString: String): BOOL; external 'SetWindowText{#A}@user32.dll stdcall';
function PathCompactPathEx(pszOut: String; pszSrc: String; cchMax: UINT; dwFlags: DWORD): BOOL; external 'PathCompactPathEx{#A}@shlwapi.dll stdcall';
function CompactPath(const sInput: String; const iNewLen: Integer): String;
begin
  SetLength(Result, MAX_PATH);
  if not PathCompactPathEx(Result, sInput, iNewLen, 0) then Result := sInput;
end;
procedure BetterInfo();
var
  CurrentFile: String;
begin
  CurrentFile := ExpandConstant(CurrentFilename);
  SetWindowText(hInfoPath, 'Директория:' + #32 + CompactPath(RemoveBackslash(ExtractFilePath(CurrentFile)), PATH_LEN));
  SetWindowText(hInfoFile,  StringOfChar(#32, 12) + 'Файл:' + #32 + ExtractFileName(CurrentFile));
end;
procedure InitializeWizard();
begin
  with WizardForm do
  begin
    with TNewStaticText.Create(WizardForm) do
    begin
      Parent := FilenameLabel.Parent;
      SetBounds(FilenameLabel.Left, ScaleY(0), ProgressGauge.Width, ScaleY(16));
      hInfoPath := Handle;
      AutoSize := False;
    end;
    with TNewStaticText.Create(WizardForm) do
    begin
      Parent := FilenameLabel.Parent;
      SetBounds(FilenameLabel.Left, ScaleY(20), ProgressGauge.Width, ScaleY(16));
      hInfoFile := Handle;
      AutoSize := False;
    end;
    FilenameLabel.Hide;
    StatusLabel.Hide;
  end;
end;







==================================================================================================== ===========



Nightwishh,
Цитата Nightwishh:



можно ли изменить цвет стандартных чекбоксов в ComponentsList-е и TasksList-е через скин
Скрипты Inno Setup. Помощь и советы [часть 5]




нет, это неисправленный косяк скинирования!

Геморно но можно создать скроллбокс и массив радиобаттонов и чекбоксов и всё это добавлять на него, через самописную функцию, если так нужен именно чеклистбокс. Короче кастомный чеклистбокс
Аватара пользователя
El Sanchez

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение El Sanchez »

Johny777, Ясно, вообщем трогать я это не буду :-) спасибо.

И последний вопрос. Можно ли запустить инсталл только один раз, т.е. при запущеном setup.exe нельзя было запустить его ещё раз и выдовалось сообщение, типо "Программа запущена". Спасибо!!!
Аватара пользователя
Mailchik

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Mailchik »

Nightwishh, в секции сетап есть параметры мьютекса, которые для этого и служат. почитай про них в справке. еще в коде есть функции для работы с мьютексами.
Аватара пользователя
Johny777

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Johny777 »

Как к стандартному файлу unins000.exe прикрутить свою иконку? Именно свою, а не ту, что имеет исполняемый файл.



Знаю, как это делается через секцию [Icons], но мне это не надо. Точнее, не нужен unins000.exe в меню Пуск.

Где-то было, но потерял...
Аватара пользователя
Mailchik

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Mailchik »

Johny777, я думаю, ты понимаешь, что используя DrawFrameControl, форма будет иметь до XP'шный стиль. Изображение


читать дальше »

Код: Выделить всё

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
[Code]
#ifdef UNICODE
 #define A "W"
 type
  PChar = PAnsiChar;
#else
 #define A "A"
#endif
const
  GWL_WNDPROC = -4;
  DFC_CAPTION = 1;
  DFCS_CAPTIONMIN = 1;
  DFCS_PUSHED = $200;
  WM_SETFOCUS         = $0007;
  WM_NCLBUTTONDOWN    = $00A1;
  WM_NCLBUTTONUP      = $00A2;
  WM_NCACTIVATE       = $0086;
  WM_NCCALCSIZE       = $0083;
  WM_NCPAINT          = $0085;
  WM_ACTIVATE         = $0006;
  WM_WINDOWPOSCHANGING = $0046;
  WA_INACTIVE = 0;
type
  LPARAM = Integer;
  WPARAM = Integer;
  LRESULT = Integer;
  TFNWndProc = Integer;
  HDC = LongWord;
  SHORT = Longint;
var
  OldWindowProc: Longint;
  myPoint: TPoint;
  myRect: TRect;
  myDC: HDC;
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint;
  external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
  external 'CallWindowProc{#A}@user32.dll stdcall';
function GetCursorPos(var lpPoint: TPoint): BOOL;
  external 'GetCursorPos@user32.dll stdcall';
function GetWindowDC(hWnd: HWND): HDC;
  external 'GetWindowDC@user32.dll stdcall';
function ReleaseDC(hWnd: HWND; hDC: HDC): Integer;
  external 'ReleaseDC@user32.dll stdcall';
function DrawFrameControl(DC: HDC; const Rect: TRect; uType, uState: UINT): BOOL;
  external 'DrawFrameControl@user32.dll stdcall';
procedure DrawButton(State: Cardinal);
 begin
 myRect.Left := WizardForm.Width - ScaleX(46);
 myRect.Right := WizardForm.Width - ScaleX(27);
 myRect.Top := ScaleY(5);
 myRect.Bottom := ScaleY(22);
 myDC := GetWindowDC(WizardForm.Handle);
 try
  DrawFrameControl(myDC, myRect, DFC_CAPTION , DFCS_CAPTIONMIN or State);
 finally
  ReleaseDC(WizardForm.Handle, myDC);
 end;
end;
function PointIntoRect: boolean;
var
 myPoint: TPoint;
 begin
  GetCursorPos(myPoint);
  Result :=
    (myPoint.X - WizardForm.Left >= WizardForm.Width - ScaleX(46)) and
    (myPoint.X - WizardForm.Left <= WizardForm.Width - ScaleX(27)) and
    (myPoint.Y - WizardForm.Top >= ScaleY(5)) and
    (myPoint.Y - WizardForm.Top <= ScaleY(22));
end;
function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
 begin
  case Msg of
    WM_NCACTIVATE, WM_NCCALCSIZE, WM_ACTIVATE, WM_NCPAINT, WM_WINDOWPOSCHANGING, WM_SETFOCUS: DrawButton(0);
    //WM_NCLBUTTONDOWN: if PointIntoRect then DrawButton(DFCS_Pushed); //состояние нажатия кнопки;
    WM_NCLBUTTONDOWN: if PointIntoRect then Application.Minimize;
  end;
  if wParam = WA_INACTIVE then DrawButton(0);
  Result := CallWindowProc(OldWindowProc, hWnd, Msg, wParam, lParam);
end;
procedure InitializeWizard();
 begin
 with WizardForm do begin
  BorderIcons := [biSystemMenu];
 end;
 OldWindowProc := SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('WindowProc'));
end;
procedure DeinitializeSetup();
 begin
  SetWindowlong(WizardForm.Handle, GWL_WNDPROC, OldWindowProc);
end;
Аватара пользователя
sergey3695

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение sergey3695 »

Johny777,
вот решение твой проблемы


Спасибо большое Mailchik, за помощь. Я так и думал что где-то чето накасячил но не мог понять что. Вообщем то Johny777, он тоже тем самым что помог мне, помог и тебе. Хотя этот вопрос меня тоже заинтересовал так что мне тоже захотелось две кнопочки )

к сожалению библеотеку меньше весом не сделать. (ну я на килобайт поменьше сделал (127 кб) но это пустяк)
Аватара пользователя
Johny777

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Johny777 »

Цитата Johny777:



alert30, EvilAlex,

код:

читать дальше »
Скрипты Inno Setup. Помощь и советы [часть 5]




Супер, спасибо ! Но возник еще 1 вопрос, его можно к исдону сделать ?

Чтобы при распаковке арка или срепа, он отображал куда и что извлекает?
Аватара пользователя
Johny777

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Johny777 »

люди.помогите мне исправить эту ошибку



Error: Custom message name may only include alphanumeric characters and/or underscores, and cannot begin with a number.



вот часть скрипта на которую он ругается



Код:

Код: Выделить всё

[Tasks]
Name: icons; Description: Создать Ярлыки:;
Name: icons\desktop; Description: На Рабочем Столе;
Name: icons\quicklaunchicon; Description: В Панели Задач;
Name: soft; Description: Установка Дополнительного ПО
Name: soft\msv; Description: Microsoft Visual C++
[CustomMessages]
Создать Ярлыки:=Create Shortcuts:
На Рабочем Столе=On the Desktop
В Панели Задач=In the Taskbar
Установка Дополнительного ПО=Install Additional Software
Аватара пользователя
Mailchik

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Mailchik »

habib2302



Надо так:







Код:

Код: Выделить всё

[Tasks]
Name: icons; Description: {cm:CreateShortcuts};
Name: icons\desktop; Description: {cm:OntheDesktop};
Name: icons\quicklaunchicon; Description: {cm:IntheTaskbar};
Name: soft; Description: {cm:InstallAdditionalSoftware}
Name: soft\msv; Description: Microsoft Visual C++
[CustomMessages]
CreateShortcuts=Создать Ярлыки
OntheDesktop=На Рабочем Столе
IntheTaskbar=В Панели Задач
InstallAdditionalSoftware=Установка Дополнительного ПО
Аватара пользователя
TERMINAL

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение TERMINAL »

Подскажите плз, как и в какой секции нужно прописать условие чтобы при отсутствии ключа в реестре (HKEY_CURRENT_USER\Software\Test, "AppData", "REG_SZ", "7890" ) установщик (ехе) вообще не стартовал или если присутствует папка С:\{E99DDD46-1221-4DB4-81F0-F24D210EB41C} тогда разрешена установка?



Нашёл командную строку как компилировать скрипт Compil32.exe /cc "С:\Proekt\тест.iss", но мне нужно каждый раз создавать новый GUID-возможно сделать автоматическую генерацию нового GUID? Лучше вопрос, для чего нужен этот GUID-я думал для регистрации в реестре, но оказалось не так. Если мне нужно скомпилировать и получить 10 разных файлов ехе, для этого нужно генерировать GUID?
Ответить

Вернуться в «Автоматическая установка приложений»