原文 http://restools.hanzify.org/article.asp?id=101
VC 重现 InnoCallback 的功能。
Version 1.1
修正在某些 Windows 平台(例如: Windows XP SP3)出现不能正常运行的问题。
引用来自 test1.iss
; -- test.iss --
; restools
; http://restools.hanzify.org
; 时间仓促,如有错误请到我的 BLOG 咨询
; CallbackCtrl.dll 为一个用于 Inno Setup 的 4 KB 的回调( Callback )函数插件。
; 跟 InnoCallback 插件功能完全一样,但是由于它是用 VC 重现功能,所以仅仅只有 4 KB 就足以完成回调函数的处理。
; 同样的功能,将会在后续的 Inno Setup 增强版中直接提供回调函数的支持,
; 也就是说无须任何插件就可以在脚本中处理回调函数。
; 这个插件只是提供给那些使用普通版本 Inno Setup 的用户使用。
; Inno Setup plugin - CallbackCtrl ( 4 KB )
; Copyright (C) restools 2009
; Version 1.1
[Setup]
AppName=My Application
AppVerName=My Application Ver 1.5
DefaultDirName={pf}\My Application
SolidCompression=yes
Compression=lzma/ultra
[Files]
Source: CallbackCtrl.dll; DestDir: {tmp}; Flags: dontcopy
[code]
type
TTimerProc=procedure(h:longword; msg:longword; idevent:longword; dwTime:longword);
function WrapTimerProc(callback:TTimerProc; paramcount:integer):longword;
external 'wrapcallbackaddr@files:callbackctrl.dll stdcall';
function SetTimer(hWnd: longword; nIDEvent, uElapse: longword; lpTimerFunc: longword): longword;
external 'SetTimer@user32.dll stdcall';
procedure mytimerproc(h:longword; msg:longword; idevent:longword; dwTime:longword);
begin
WizardForm.WelcomePage.Color:=random($FFFFFF);
end;
procedure InitializeWizard();
var
timercallback: Longword;
begin
timercallback := WrapTimerProc(@mytimerproc,4);
settimer(0,0,1000,timercallback);
end;
; restools
; http://restools.hanzify.org
; 时间仓促,如有错误请到我的 BLOG 咨询
; CallbackCtrl.dll 为一个用于 Inno Setup 的 4 KB 的回调( Callback )函数插件。
; 跟 InnoCallback 插件功能完全一样,但是由于它是用 VC 重现功能,所以仅仅只有 4 KB 就足以完成回调函数的处理。
; 同样的功能,将会在后续的 Inno Setup 增强版中直接提供回调函数的支持,
; 也就是说无须任何插件就可以在脚本中处理回调函数。
; 这个插件只是提供给那些使用普通版本 Inno Setup 的用户使用。
; Inno Setup plugin - CallbackCtrl ( 4 KB )
; Copyright (C) restools 2009
; Version 1.1
[Setup]
AppName=My Application
AppVerName=My Application Ver 1.5
DefaultDirName={pf}\My Application
SolidCompression=yes
Compression=lzma/ultra
[Files]
Source: CallbackCtrl.dll; DestDir: {tmp}; Flags: dontcopy
[code]
type
TTimerProc=procedure(h:longword; msg:longword; idevent:longword; dwTime:longword);
function WrapTimerProc(callback:TTimerProc; paramcount:integer):longword;
external 'wrapcallbackaddr@files:callbackctrl.dll stdcall';
function SetTimer(hWnd: longword; nIDEvent, uElapse: longword; lpTimerFunc: longword): longword;
external 'SetTimer@user32.dll stdcall';
procedure mytimerproc(h:longword; msg:longword; idevent:longword; dwTime:longword);
begin
WizardForm.WelcomePage.Color:=random($FFFFFF);
end;
procedure InitializeWizard();
var
timercallback: Longword;
begin
timercallback := WrapTimerProc(@mytimerproc,4);
settimer(0,0,1000,timercallback);
end;
点击下面连接下载例子。
http://restools.hanzify.org/inno/callbackctrl/InnoCallbackCtrl_V1.1.zip