2017-02-22 3 views
2

Как закрыть программу установки на странице «Готово» через определенное время?Inno Setup - Как закрыть готовый установщик через определенное время?

Его также можно использовать как: как закрыть программу установки после некоторого времени неактивности? (закрыть/отменить установку). Это возможно?

+0

Зачем вам это нужно? –

+0

@MartinPrikryl Я бы хотел использовать функцию, похожую на MessageBoxTimeout, но со страницей, в основном готовой, так что, как только установка будет завершена, готовая версия закроется через некоторое время. –

ответ

3

Используйте библиотеку InnoTools InnoCallback для установки таймера, как только появится страница «Готово».

[Files] 
Source: "InnoCallback.dll"; Flags: dontcopy 

[Code] 

type 
    TTimerProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord); 

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; 
    external '[email protected] stdcall'; 
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; 
    external '[email protected] stdcall'; 

function WrapTimerProc(Callback: TTimerProc; ParamCount: Integer): LongWord; 
    external '[email protected]:InnoCallback.dll stdcall delayload'; 

var 
    PageTimeoutTimer: LongWord; 
    PageTimeout: Integer; 

procedure UpdateFinishButton; 
begin 
    WizardForm.NextButton.Caption := 
    Format(SetupMessage(msgButtonFinish) + ' - %ds', [PageTimeout]); 
end; 

procedure PageTimeoutProc(
    H: LongWord; Msg: LongWord; IdEvent: LongWord; Time: LongWord); 
begin 
    if PageTimeout > 1 then 
    begin 
    Dec(PageTimeout); 
    UpdateFinishButton; 
    end 
    else 
    begin 
    WizardForm.NextButton.OnClick(WizardForm.NextButton); 
    end; 
end; 

procedure CurPageChanged(CurPageID: Integer); 
begin 
    if CurPageID = wpFinished then 
    begin 
    PageTimeout := 10; 
    UpdateFinishButton; 
    PageTimeoutTimer := SetTimer(0, 0, 1000, WrapTimerProc(@PageTimeoutProc, 4)); 
    end; 
end; 

function NextButtonClick(CurPageID: Integer): Boolean; 
begin 
    if CurPageID = wpFinished then 
    begin 
    KillTimer(0, PageTimeoutTimer); 
    PageTimeoutTimer := 0; 
    end; 
    Result := True; 
end; 

Timeout of Finished page


Похожие вопросы: