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

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 7]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 7]

Аватара для El Sanchez

Ветеран


Contributor


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


Конфигурация

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:

Показать/скрыть: Ссылки на примеры скриптов:

Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

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

Отправлено: 11:48, 10-03-2014

 

Аватара для diman_21Ru

Старожил


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

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


Как в установщике убрать Noscroll нету прокрутки мышкай.

Отправлено: 15:03, 12-12-2014 | #2161



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


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

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


Цитата diman_21Ru:
Как в установщике убрать Noscroll нету прокрутки мышкай. »
Писал же уже: за это отвечает свойство контрола ScrollBars
  • ScrollBars := ssVertical;

Если же речь идет о отсутствии скрола при использовании скина, то решение уже давалось:
http://forum.oszone.net/post-2308009-2259.html

Отправлено: 16:39, 12-12-2014 | #2162


Аватара для diman_21Ru

Старожил


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

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


saurn, а куда это вставить

Отправлено: 17:32, 12-12-2014 | #2163


Аватара для nikolaha86med

Новый участник


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

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


Народ подскажите как сделать прозрачными такие формы как TEdit например?

Отправлено: 18:34, 12-12-2014 | #2164


Аватара для Dodakaedr

Ветеран


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

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


Цитата diman_21Ru:
а куда это вставить »
Можно сюда...
Пример
Код: Выделить весь код
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Code]
var
  NewMemo1: TNewMemo;

procedure RedesignWizardForm;
begin
  NewMemo1 := TNewMemo.Create(WizardForm);
  with NewMemo1 do
  begin
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(176);
    Top := ScaleY(184);
    Width := ScaleX(301);
    Height := ScaleY(113);
    Lines.Text := 'Описание программы:' + #13#10 +
         'My Autoplay Professional - программа для создания ' + #13#10 +
         'меню ' + #13#10 +
         'автозапуска, презентаций и прочих проектов. Вам ' + #13#10 +
         'не ' + #13#10 +
         'нужен опыт работы с такими программами, все ' + #13#10 +
         'предельно ясно и удобно, плюс есть Русская ' + #13#10 +
         'поддержка, много готовых шаблонов. Стоит ' + #13#10 +
         'выделить ' + #13#10 +
         'удобный редактор, который позволит в короткие ' + #13#10 +
         'сроки сделать профессиональное меню ' + #13#10 +
         'автозапуска.';
    ScrollBars := ssVertical; //возможны значения ssBoth, ssHorizontal, ssNone, ssVertical
  end;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;


Цитата nikolaha86med:
Народ подскажите как сделать прозрачными такие формы как TEdit например? »
Пример. На страницах 31, 32 это уже обсуждалось

-------
Inno Setup 5 Ultra Unicode


Последний раз редактировалось Dodakaedr, 12-12-2014 в 19:13.


Отправлено: 18:55, 12-12-2014 | #2165


Аватара для nikolaha86med

Новый участник


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

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


Вложения
Тип файла: zip скрипт.zip
(6.4 Kb, 18 просмотров)

Dodakaedr, Не поможешь вставить нужное из этого примера в мой скрипт,а то у меня чет не получается!

Отправлено: 23:01, 12-12-2014 | #2166


Ветеран


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

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


Цитата diman_21Ru:
а куда это вставить »
http://forum.oszone.net/post-2433239-1969.html

Отправлено: 16:43, 13-12-2014 | #2167


Новый участник


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

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


Подскажите пожалуйста. Есть пример
Код: Выделить весь код
  // Ask the user a Yes/No question, defaulting to No
  if MsgBox('Are you sure?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then
  begin
    // user clicked Yes
  end;
Как мне в этом примере подсветить кнопку YES? Просто хочу сделать обводку вокруг...

Отправлено: 02:10, 14-12-2014 | #2168


Ветеран


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

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


petrmissial@fb,
MB_DEFBUTTON2, где цифра указывает на номер кнопки. Кнопка номер 1 - YES, кнопка номер 2 - NO. Следовательно, чтобы сделать кнопку YES дефолтной, надо указать ее номер, тоесть 1. Или вобще убрать MB_DEFBUTTON, по умолчанию будет активна первая кнопка.
Код: Выделить весь код
MsgBox(  'Are you sure?', mbConfirmation, MB_YESNO + MB_DEFBUTTON1 )
// MsgBox(  'Are you sure?', mbConfirmation, MB_YESNO )

Последний раз редактировалось saurn, 14-12-2014 в 16:01.


Отправлено: 04:07, 14-12-2014 | #2169


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


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

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


код
Код: Выделить весь код
#define A = (Defined UNICODE) ? "W" : "A"
const
    INTERNET_OPEN_TYPE_PRECONFIG = 0;
    INTERNET_FLAG_NO_CACHE_WRITE = $4000000;
    INTERNET_FLAG_PRAGMA_NOCACHE = $100;
    INTERNET_FLAG_RELOAD = $80000000;
    INTERNET_FLAG_NEED_FILE = $10;
    INTERNET_FLAG_NO_AUTO_REDIRECT = $200000;
    HTTP_QUERY_FLAG_NUMBER = $20000000;
    HTTP_QUERY_LOCATION = 33;
    HTTP_QUERY_CONTENT_LENGTH = 5;
    HTTP_QUERY_STATUS_CODE = 19;
    ERROR_INSUFFICIENT_BUFFER = 122;
    HTTP_STATUS_OK = 200;
    HTTP_STATUS_REDIRECT = 302;
    GENERIC_READ = $80000000;
    GENERIC_WRITE = $40000000;
    CREATE_ALWAYS = 2;
    HEAP_ZERO_MEMORY = $8;
    IRF_SYNC = $4;

type
    INTERNET_BUFFERS = record
        dwStructSize: DWORD;
        Next: Longint;
        lpcszHeader: String;
        dwHeadersLength: DWORD;
        dwHeadersTotal: DWORD;
        lpvBuffer: Longint;
        dwBufferLength: DWORD;
        dwBufferTotal: DWORD;
        dwOffsetLow: DWORD;
        dwOffsetHigh: DWORD;
    end;

var
    g_DownloadPage: TOutputProgressWizardPage;

function InternetOpen(lpszAgent: String; dwAccessType: DWORD; lpszProxyName, lpszProxyBypass: String; dwFlags: DWORD): Integer; external 'InternetOpen{#A}@wininet.dll stdcall';
function InternetOpenUrl(hInternet: Longint; lpszUrl, lpszHeaders: String; dwHeadersLength, dwFlags: DWORD; dwContext: DWORD_PTR): Integer; external 'InternetOpenUrl{#A}@wininet.dll stdcall';
function InternetReadFileEx(hFile: Longint; var lpBuffersOut: INTERNET_BUFFERS; dwFlags: DWORD; dwContext: DWORD_PTR): BOOL; external 'InternetReadFileEx{#A}@wininet.dll stdcall';
function InternetCloseHandle(hInternet: Longint): BOOL; external 'InternetCloseHandle@wininet.dll stdcall';
function HttpQueryInfo(hRequest: Longint; dwInfoLevel: DWORD; var lpvBuffer: Longint; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; external 'HttpQueryInfo{#A}@wininet.dll stdcall';
function _HttpQueryInfo(hRequest: Longint; dwInfoLevel: DWORD; lpvBuffer: String; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; external 'HttpQueryInfo{#A}@wininet.dll stdcall';
function StrFormatByteSize64(qdw: Currency; pszBuf: AnsiString; cchBuf: UINT): Longint; external 'StrFormatByteSize64A@shlwapi.dll stdcall';
function StrFromTimeInterval(pszOut: String; cchMax: UINT; dwTimeMS: DWORD; digits: Byte): Integer; external 'StrFromTimeInterval{#A}@shlwapi.dll stdcall';
function CreateFile(lpFileName: String; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: Longint; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; external 'CreateFile{#A}@kernel32.dll stdcall';
function WriteFile(hFile: THandle; lpBuffer: Longint; nNumberOfBytesToWrite: DWORD; var lpNumberOfBytesWritten: DWORD; lpOverlapped: Longint): BOOL; external 'WriteFile@kernel32.dll stdcall';
function GetProcessHeap(): THandle; external 'GetProcessHeap@kernel32.dll stdcall';
function HeapAlloc(hHeap: THandle; dwFlags, dwBytes: DWORD): Longint; external 'HeapAlloc@kernel32.dll stdcall';
function HeapFree(hHeap: THandle; dwFlags: DWORD; lpMem: Longint): BOOL; external 'HeapFree@kernel32.dll stdcall';
function HeapSize(hHeap: THandle; dwFlags: DWORD; lpMem: Longint): DWORD; external 'HeapSize@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

///////////////////////////////////////////////////
function TicksToTime(const dwTicks: DWORD): String;
begin
    Result := StringOfChar(#0, StrFromTimeInterval(Result, 0, dwTicks, 8));
    StrFromTimeInterval(Result, Length(Result)+1, dwTicks, 8);
end;

////////////////////////////////////////////////////////
function BytesToSize(const exBytes: Double): AnsiString;
begin
    Result := StringOfChar(#0, 15);
    if Abs(exBytes) > 9.223372036854775807E18 then exBytes := 0;
#ifdef UNICODE
    Result := CastIntegerToAnsiString(StrFormatByteSize64(Abs(exBytes div 1E4), Result, Length(Result)));
#else
    Result := CastIntegerToString(StrFormatByteSize64(Abs(exBytes div 1E4), Result, Length(Result)));
#endif
end;

////////////////////////////////////////////////////
function DownloadFile(const szURL: String): Boolean;
var
    hConnect, hSession, hFile, hHeap: THandle;
    szHeader, szFileName: String;
    dwBufferLength, dwIndex, dwStartDownload, dwStart, dwElapsed, dwWritten: DWORD;
    lpBuffer, lpStatus, lpSize: Longint;
    ib: INTERNET_BUFFERS;
begin
    try
        hSession := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, '', '', 0);
        if hSession = 0 then Exit;

        // additional header
        szHeader := 'Referer: http://example.org/'#13#10;

        // try direct link
        repeat
            hConnect := InternetOpenUrl(hSession, szURL, szHeader, Length(szHeader), INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD or INTERNET_FLAG_NO_AUTO_REDIRECT, 0);
            if hConnect = 0 then Exit;
            dwBufferLength := SizeOf(lpBuffer);
            dwIndex := 0;
            lpStatus := 0;
            if not HttpQueryInfo(hConnect, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER, lpStatus, dwBufferLength, dwIndex) then Exit;
            lpBuffer := 0;
            HttpQueryInfo(hConnect, HTTP_QUERY_LOCATION, lpBuffer, dwBufferLength, dwIndex);
            if DLLGetLastError = ERROR_INSUFFICIENT_BUFFER then
            begin
                szURL := StringOfChar(#0, dwBufferLength-1);
                if not _HttpQueryInfo(hConnect, HTTP_QUERY_LOCATION, szURL, dwBufferLength, dwIndex) then Exit;
                if lpStatus = HTTP_STATUS_REDIRECT then InternetCloseHandle(hConnect);
            end;
        until lpStatus = HTTP_STATUS_OK;

        // get file size
        dwBufferLength := 4;
        dwIndex := 0;
        if not HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER, lpSize, dwBufferLength, dwIndex) then Exit;

        // save dialog
        procedure DownloadFile(urlFilename, szDestDir: String);
        if DirExists(szDestDir) then
        try
    fName := Format('%s\%s', [szDestDir, fName]);
                   hFile := CreateFile(szFileName, GENERIC_READ or GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);  //create file
            if hFile = 0 then Exit;
            hHeap := GetProcessHeap();
            lpBuffer := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 4*1024);     // buffer size must be >= 512Kb
            ib.dwStructSize := SizeOf(ib);
            ib.lpvBuffer := lpBuffer;
            ib.dwBufferLength := HeapSize(hHeap, 0, lpBuffer);
0);  //create file
            if hFile = 0 then Exit;
            hHeap := GetProcessHeap();
            lpBuffer := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 4*1024);     // buffer size must be >= 512Kb
            ib.dwStructSize := SizeOf(ib);
            ib.lpvBuffer := lpBuffer;
            ib.dwBufferLength := HeapSize(hHeap, 0, lpBuffer);
        szFileName := ExtractFileName(szURL);
        if GetSaveFileName('Сохранить как...', szFileName, '', Format('*%s', [ExtractFileExt(szFileName)]), ExtractFileExt(szFileName)) then
        try
            hFile := CreateFile(szFileName, GENERIC_READ or GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);  //create file
            if hFile = 0 then Exit;
            hHeap := GetProcessHeap();
            lpBuffer := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 4*1024);     // buffer size must be >= 512Kb
            ib.dwStructSize := SizeOf(ib);
            ib.lpvBuffer := lpBuffer;
            ib.dwBufferLength := HeapSize(hHeap, 0, lpBuffer);

            // show page
            g_DownloadPage.Show;
            g_DownloadPage.ProgressBar.Show;
            g_DownloadPage.SetProgress(0, lpSize);

            // try download
            try
                // initial labels
                g_DownloadPage.Msg1Label.Caption := Format(
                    'Файл:'#9#9'%s'#13#10 +
                    'Загружено:'#9'%s из %s', [ExtractFileName(szFileName), BytesToSize(0), BytesToSize(lpSize)]
                );
                g_DownloadPage.Msg2Label.Caption := Format(
                    'Прогресс:'#9'%s'#13#10 +
                    'Скорость:'#9'%s/сек'#13#10 +
                    'Прошло:'#9'0 сек'#13#10 +
                    'Осталось:'#9'%d сек', [FormatFloat('0.#0 %', MulDiv(g_DownloadPage.ProgressBar.Position, 100, lpSize)), BytesToSize(0), MaxInt]
                );

                // download
                dwStartDownload := GetTickCount;
                while ib.dwBufferLength > 0 do
                begin
                    dwStart := GetTickCount;
                    dwElapsed := 0;
                    while dwElapsed < 1000 do
                    begin
                        // read file
                        InternetReadFileEx(hConnect, ib, IRF_SYNC, 0);

                        // write file
                        WriteFile(hFile, ib.lpvBuffer, ib.dwBufferLength, dwWritten, 0);
                        ib.dwBufferTotal := ib.dwBufferTotal + dwWritten;

                        // update progressbar
                        g_DownloadPage.ProgressBar.Position := ib.dwBufferTotal;

                        // process messages
                        Application.ProcessMessages;
                        dwElapsed := GetTickCount - dwStart;
                    end;

                    // update labels
                    dwElapsed := GetTickCount-dwStartDownload;
                    g_DownloadPage.Msg1Label.Caption := Format(
                        'Файл:'#9#9'%s'#13#10 +
                        'Загружено:'#9'%s из %s', [ExtractFileName(szFileName), BytesToSize(ib.dwBufferTotal), BytesToSize(lpSize)]
                    );
                    g_DownloadPage.Msg2Label.Caption := Format(
                        'Прогресс:'#9'%d %%'#13#10 +
                        'Скорость:'#9'%s/сек'#13#10 +
                        'Прошло:'#9'%s'#13#10 +
                        'Осталось:'#9'%d сек', [MulDiv(ib.dwBufferTotal, 100, lpSize), BytesToSize(MulDiv(ib.dwBufferTotal, 1000, dwElapsed)), TicksToTime(dwElapsed), MulDiv(lpSize-ib.dwBufferTotal, dwElapsed, 1000)/(ib.dwBufferTotal + 1)]
                    );
                end;
            except
                Result := False;    // error
            finally
            end;
        finally
            CloseHandle(hFile);
            HeapFree(hHeap, 0, lpBuffer);
            Result := ib.dwBufferTotal = lpSize;    // success
        end;
    except
        Result := False;    // error
    finally
        InternetCloseHandle(hConnect);
        InternetCloseHandle(hSession);
        g_DownloadPage.Hide;
    end;
end;

/////////////////////////////////////
procedure CreateDownloadProgressPage;
begin
    g_DownloadPage := CreateOutputProgressPage('Загрузка файла', '');
    with g_DownloadPage do
    begin
        Msg1Label.Height := Msg1Label.Height shl 1;
        Msg2Label.Height := Msg2Label.Height shl 2;
        Msg2Label.Top := ProgressBar.Top + ProgressBar.Height + ScaleY(5);
    end;
end;

/////////////////////////////
procedure InitializeWizard();
begin
    CreateDownloadProgressPage();
end;

//////////////////////////////////////////////////////
function NextButtonClick(CurPageID: Integer): Boolean;
begin
    Result := True;
    case CurPageID of
        wpWelcome: DownloadFile('http://yandex.ru/1.gif');

    end;
end;

подскажите,пытался сделать загрузку файла без сохранить как,сделать все как указано #442,но почему то не работает?что не так?где нужно указать саму директорию сохранения тоже не совсем понятно???

Последний раз редактировалось icetanker, 15-12-2014 в 09:40.


Отправлено: 09:27, 15-12-2014 | #2170



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 7]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34




 
Переход