inno-setup – 如何在指定时间内显示消息框?

有没有办法在指定的时间内显示一个消息框(这意味着,当指定的时间过去时,消息框将自动关闭)?

解决方法

Windows API具有在指定时间内显示消息框的功能,但由于某种原因,该功能未记录,这意味着它没有得到官方支持,可能会有所变化.

函数被称为MessageBoxTimeout,它甚至在user32.dll库中导出,让我觉得这个函数唯一缺少的是官方文档.但是谁知道……

以下脚本显示如何在显示向导表单之前显示消息框5秒.如果用户未单击“确定”按钮,也不手动关闭窗口,则在该5秒时间过后,消息框将自动关闭

[Code]
#ifdef UNICODE
  #define AW "W"
#else
  #define AW "A"
#endif
const
  MB_TIMEDOUT = 32000;
  MB_ICONERROR = $10;
  MB_ICONQUESTION = $20;
  MB_ICONWARNING = $30;
  MB_ICONinformatION = $40;

function MessageBoxTimeout(hWnd: HWND; lpText: string; lpCaption: string;
  uType: UINT; wLanguageId: Word; dwMilliseconds: DWORD): Integer;
  external 'MessageBoxTimeout{#AW}@user32.dll stdcall';

procedure InitializeWizard;
begin
  MessageBoxTimeout(WizardForm.Handle,'This message will be automatically ' +
    'closed in 5 seconds!','Caption...',MB_OK or MB_ICONinformatION,5000);
end;

有关参数和结果值的更多信息,请参阅MessageBox函数帮助站点和一些描述MessageBoxTimeout函数本身的非官方文章,例如:

> Maurizio Pisano: MessageBoxTimeout API (CodeProject)
> Eddie Shipman: Undocumented MessageBoxTimeOut function (Embarcadero)

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...