我得到了一个可以选择安装的组件(应用程序)列表(默认情况下它们都被选中),所有这些组件都得到了ExtraDiskSpaceRequired
. 一开始,我会根据是否安装和其他一些条件动态更改应选中或取消选中的应用程序。
现在的问题是,当我TNewCheckListBox
在开始时从代码中检查组件(项目)时,“需要磁盘空间”标签不会更新,直到我通过鼠标或键盘从列表中更改某些复选框的状态。
我试图用以下方法修复它:
WizardForm.Repaint
和其他类似的方法- 显示该页面时更改复选框的状态
尝试从 Windows API 向下和向上发送 Space 按钮,
SendInput
但它返回 0(未按下)。我SendInput
在CurPageChanged
显示 wpSelectComponents 时调用函数并从 Timer我用于的代码
SendInput
:type TKeyboardInput = record Itype: DWORD; wVk: WORD; wScan: WORD; dwFlags: DWORD; time: DWORD; dwExtraInfo: DWORD; end; function SendInput(nInputs: UINT; pInputs: TKeyboardInput; cbSize: Integer): UINT; external 'SendInput@user32.dll stdcall'; function SendKeyPressed(KeyCode: Word): Boolean; var InputDown: TKeyboardInput; InputUp: TKeyboardInput; begin Result := False; InputDown.Itype := 1; InputDown.wVk := KeyCode; InputDown.wScan := 0; InputDown.time := 0; InputDown.dwFlags := 0; InputUp.Itype := 1; InputUp.wVk := KeyCode; InputUp.wScan := 0; InputUp.time := 0; InputUp.dwFlags := 2; MsgBox(IntToStr(SendInput(1, InputDown, SizeOf(InputDown))), mbInformation, MB_OK); Result := SendInput(1, InputUp, SizeOf(InputUp)) = 1; if Result then begin MsgBox('Test2', mbInformation, MB_OK); end; end;
知道如何解决这个问题吗?
默认示例:
- CheckBox1 5MB 已选中
- CheckBox2 7MB 已选中
- 磁盘空间标签 12MB
在启动时通过代码更改状态后的示例:
- CheckBox1 5MB 已选中
CheckBox2 7MB 未选中
在我通过鼠标或键盘更改复选框状态之前,磁盘空间标签仍为 12MB
注意:我正在使用 Inno Setup 5.6.1 (u),暂时无法更新。