有没有一种方法可以在指定的时间内显示消息框(也就是说,当指定的时间过去时,消息框会自动关闭)?
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, 0, 5000);
end;
有关参数和结果值的更多信息,请参考MessageBox
函数帮助网站以及一些非官方文章,这些文章描述了MessageBoxTimeout
函数本身,例如:
如果您想要比@TLama的回答中的MessageBoxTimeout
更自定义的实现(例如倒计时显示或自定义按钮标题):
CreateCustomForm
创建自定义表单;SetTimer
实现超时/倒计时。有关完整代码,请参见MsgBox - Make unclickable OK Button and change to countdown - Inno Setup。