2017-02-22 118 views
2

如何在一段时间后关闭“完成”页面上的安装程序?Inno Setup - 如何在特定时间后关闭完成的安装程序?

它也可以解释为:如何在一段时间的非活动后关闭安装程序? (关闭/取消安装)。这可能吗?

+0

为什么要这样做? –

+0

@MartinPrikryl我想使用类似于MessageBoxTimeout的函数,但是有一个页面,基本上就是完成页面,所以一旦安装完成,完成页面会在一段时间后关闭。 –

回答

3

当“Finished”页面显示后,使用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


相关的问题:

相关问题