Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для ErikPshat

Пользователь


Сообщения: 54
Благодарности: 11

Профиль | Отправить PM | Цитировать


pollipen, ну как мы запускаем любые экзешники через "ShellExec" или "Exec". Там на втором месте указываются параметры к экзешнику.
Вот пример извлечения запароленных архивов 7-Zip:
Код: Выделить весь код
; Дефайним переменные
#define   Name       "My_Program_Name"
#define   UserName   "by pollipen"
#define   Version    "1.0.0.0"
#define   Publisher  "pollipen © OsZone Team"
#define   ExeName    "My_Program_Name"
;
; Точка с запятой - это комментарий
;
; Выставляем стандартные параметры программы в секции Setup:
[Setup]
;VersionInfoCompany=Название компании
VersionInfoCompany={#Publisher}

;VersionInfoCopyright=Авторские права
VersionInfoCopyright=(c) 2006-2018 {#Publisher}

;VersionInfoDescription=Описание файла
VersionInfoDescription={#Name} {#UserName}

;VersionInfoProductName=Название продукта
VersionInfoProductName={#Name}

;VersionInfoProductVersion=1.0.0.0 (Версия продукта цифровая)
VersionInfoProductVersion={#Version}

;VersionInfoProductTextVersion=Производитель
VersionInfoProductTextVersion={#Publisher}

;VersionInfoTextVersion=Версия файла текстовая
VersionInfoTextVersion={#Version} Final

;VersionInfoVersion=1.0.0.0 (Версия файла цифровая)
VersionInfoVersion={#Version}
;
; Таскаем (пакуем) с собой экзешник и INI (для примера) в программе:
[Files]
Source: Include\7z.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\RUS\Config_en.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\ENG\Config_en.ini; DestDir: {tmp}; Flags: dontcopy
;
; Выставляем поддерживаемые языки в программе:
[Languages]
Name: en; MessagesFile: compiler:Default.isl
Name: ru; MessagesFile: compiler:Languages\Russian.isl
;
; Заменяем стандартные диалоги на свои любимые:
[Messages]
SetupAppTitle={#Name}
SelectLanguageTitle={#Name}
ru.SelectLanguageLabel=Выберите язык, который будет использован в программе распаковки:
en.SelectLanguageLabel=Select the language to use in the unpacking program:
;
; Добавляем свои кастомные диалоги:
[CustomMessages]
ru.SelectArch=Выберите файл архива для распаковки
ru.SelectedArch=Выбран архивный файл :
en.SelectArch=Select archive file to unpack
en.SelectedArch=Selected archive file :
;
; //////////////////////////////////////
; А тут пошла секция кода Code (пробелы у Code убираем, т.к. форум их воспринимает как ББ-код):
[ Code ]
// Допустим, берём любой текст из INI-файла, в данном случае название экзешника 7z.exe. Пишем для этого функцию:
// В INI секция [Support], а под ней ключ UNPACK_ARCH=7z.exe.
// Захватываем через переменную тот языковой INI, который язык юзер выбрал при запуске программы:
function UnpackArch(Default:String):String;
  Begin
    Result:=GetIniString('Support', 'UNPACK_ARCH', '', ExpandConstant('{tmp}\Config_{language}.ini'));
  end;

{ Команда кнопки "Распаковать архив". Код самой кнопки приводить не буду, у вас своя кнопка }
procedure UnpackArchButtonClick(Sender: TObject);
// Объявляем новую переменную названия выбранного архива через проводник Windows:
var
  ArchName: String;
begin
// Извлекаем из инсталлятора в {tmp} файлы архиватора:
  ExtractTemporaryFile('7z.exe');
  ExtractTemporaryFile('7z.dll');
// Присваиваем в объявленную выше переменную имя выбранного архива:
  ArchName := '';
// Открываем архив в проводнике Windows:
  if GetOpenFileName(ExpandConstant('{cm:SelectArch}'),ArchName,ExpandConstant('{src}'),ExpandConstant('{cm:ArchFiles}')+' (001,ZIP,RAR,7z)|*.001;*.zip;*.rar;*.7z|'+ExpandConstant('{cm:TOMFile}')+' (*.001)|*.001|'+ExpandConstant('{cm:ZIPFile}')+' (*.zip)|*.zip|'+ExpandConstant('{cm:RARFile}')+' (*.rar)|*.rar|'+ExpandConstant('{cm:RARMFile}')+' (*.part1.rar)|*.part1.rar|'+ExpandConstant('{cm:SevenFile}')+' (*.7z)|*.7z|'+ExpandConstant('{cm:AllFiles}')+'|*.*','001') then
// Затем отображаем в окошке имя выбранного архива и спрашиваем подтверждение или отказ на извлечение:
    if MsgBox(ExpandConstant('{cm:SelectedArch}')+#10#10+ArchName+#10#10+ExpandConstant('{cm:ExtractArch}'), mbInformation, MB_YESNO) = IDYES then
// В случае согласия, травим архив на экзешник 7z.exe, а на втором месте указываются параметры, про которые вы спрашивали, один из параметров (толькодлясвоих) - это пароль:
  if not ShellExec('open',ExpandConstant('{tmp}\{code:UnpackArch}'),'x -y -oExtractedArchive -pтолькодлясвоих '+'"'+ArchName+'"',ExpandConstant('{src}'),SW_SHOWNORMAL,ewWaitUntilTerminated,ResultCode) then 
  MsgBox(ExpandConstant('{code:NotFileOnDiskMsg}'),mbCriticalError,MB_OK);
  begin ShellExec('open',ExpandConstant('{src}\ExtractedArchive'),'','',SW_SHOWNORMAL,ewWaitUntilIdle,ResultCode) end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:52, 30-10-2018 | #138