Inno Setup:以秒为单位的指定时间后自动选中复选框

Inno Setup : Automatically check a checkbox after a specified time in seconds

您好,我希望我的 Inno 设置脚本在指定时间(例如 5 秒)后自动检查我的一个向导页面中的 CheckBox

原因如下:

我创建了一个复选框,它可以在切换时更改 WizardFormClientWidthClientHeight

如果我不点击它,WizardForm 的宽度和高度保持不变。这就是它的行为方式。


我为此编写的代码:

var
  MinimizerCheckBox: TNewCheckBox;

procedure InitializeWizard();
begin
  MinimizerCheckBox := TNewCheckBox.Create(WizardForm);

  with MinimizerCheckBox do
  begin
    Name := 'MinimizerCheckBox';
    Parent := WizardForm;
    Left := ScaleX(560);
    Top := ScaleY(315);
    Width := ScaleX(90);
    Height := ScaleY(14);
    Alignment := taLeftJustify;
    Caption := 'Compact Mode';
    OnClick := @MinimizerCheckBoxClick;
    TabOrder := 3;
  end;
end;

procedure MinimizerCheckBoxClick(Sender: TObject);
begin
  if MinimixerCheckBox.Checked then
  begin
    with WizardForm do
    begin
      WizardForm.ClientWidth:=420;
      WizardForm.ClientHeight:=175;
    end;
  end else begin
    with WizardForm do
    begin
      WizardForm.ClientWidth:=654;
      WizardForm.ClientHeight:=407;
    end;
  end;
end;

我想在指定时间后自动选中该复选框。

任何示例代码可以做到这一点?

提前致谢。

您可以像这样安排一个计时器来检查复选框:

[Code]

var
  MinimizerCheckBox: TCheckBox;

...

function SetTimer(
  hWnd: longword; nIDEvent, uElapse: longword; lpTimerFunc: longword): longword;
  external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: HWND; uIDEvent: UINT): BOOL; 
  external 'KillTimer@user32.dll stdcall'; 

var
  CheckTimerID: Integer;

procedure StopCheckTimer;
begin
  Log('Killing timer');
  KillTimer(0, CheckTimerID);
  CheckTimerID := 0;
end;

procedure CheckProc(h: LongWord; msg: LongWord; idevent: LongWord; dwTime: LongWord);
begin
  Log('Timer elapsed');
  StopCheckTimer;
  MinimizerCheckBox.Checked := True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpXXX then { your page id }
  begin
    Log('Starting 5s timer');
    CheckTimerID := SetTimer(0, 0, 5000, CreateCallback(@CheckProc));
  end
    else
  if CheckTimerID <> 0 then
  begin
    StopCheckTimer;
  end;
end;

对于 CreateCallback function, you need Inno Setup 6. If you are stuck with Inno Setup 5, you can use WrapCallback function from InnoTools InnoCallback 库。