目前好多软件在安装完成时都有什么 立刻运行、打开网址、推荐安装其他工具等功能
我司领导也追时髦要求了这个功能而且要推荐多个,所以这个功能实现起来就需要自己去写代码了。陆陆续续研究了研究了好长时间,由于不是专业做安装包的,提出个功能就要研究好久,提出个小问题还要查资料改半天呢,更别说这么大个功能呢。终于今天搞定了,来发个博。希望对用的到的提供帮助,节约点时间。
推荐安装的工具不超过2个可以 调用SdFinish dialog很容易就实现了(一定注意只能推荐2个),代码如下
bOpt1 = TRUE; bOpt2 = TRUE; szOpt1 = "安装xxxx工具1"; szOpt2 = "安装xxxx工具2"; if ( BATCH_INSTALL ) then SdFinishReboot ( szTitle , szMsg1 , SYS_BOOTMACHINE , szMsg2 , 0 ); else SdFinish ( szTitle , szMsg1 , szMsg2 , szOpt1 , szOpt2 , bOpt1 , bOpt2 ); endif; if (bOpt1) then LaunchApp (SUPPORTDIR ^ "setup1.exe",""); endif; if (bOpt2) then LaunchApp (SUPPORTDIR ^ "setup2.exe",""); endif;
实现超过3个上面的代码就无法做了,我曾修改过 SdFinish这个dialog的自带代码,但是给改乱套了,呵呵,改了好久啊,就是搞不定。后来看到有 AskOptions对画框,我就在想完成的时候调用这个dialog为完成,就把dialog改成下图这样了
可是调试的时候他还是原来的样子,并不是我改成这样就这样了。那就得修改它的代码了。在 installscript中调出自带代码
这个dialog有3个按钮。如何将“上一步”“取消”这2按钮给去掉,再将“下一步”按钮的text给改成“完成”就要去 AskOptions 写代码来完成了,只在dialog中改文本,删按钮不管用。运行时代码又会将这个dialog给初始化成开始状态,所以只能去修改代码,找对路改起来也很简单。
找到要隐藏的两个按钮的ID,应该一个是 9,12,下一步的ID应该是1
获取到当前dialog的句柄
hDlg = CmdGetHwndDlg(DLG_ASKOPTIONS);
就在这句下面写下面的代码(隐藏 上一步、取消按钮,修改 下一步 的text叫 完成)
hItem = CtrlGetDlgItem("", hDlg, 9);
ShowWindow(hItem, SW_HIDE);
hItem = CtrlGetDlgItem("", hDlg, 12);
ShowWindow(hItem, SW_HIDE);
SetWindowText(CtrlGetDlgItem("", hDlg, 1),"完成");
即三个按钮修改完了。
OnFirstUIAfter()如何调用就很简单了
推荐安装、打开网址、运行软件等各个操作都可以做了
begin Dlg_AskOptions: szMsg = "推荐:"; szText1 = " 运行 XXXX szText2 = " 打开 XXX网址"; szText3 = " 安装 工具1"; szText4 = " 安装 工具2"; szText5 = " 安装 工具3"; nvCheck1 = TRUE; nvCheck2 = TRUE; nvCheck3 = TRUE; nvCheck4 = FALSE; nvCheck5 = FALSE; // Display the check box (NONEXCLUSIVE) dialog. nValue = NONEXCLUSIVE; nReturn=AskOptions (nValue, szMsg, szText1, nvCheck1, szText2, nvCheck2, szText3, nvCheck3, szText4, nvCheck4, szText5, nvCheck5 ); if (nReturn==NEXT) then if (nvCheck1) then LaunchApp(TARGETDIR ^ "XXX.exe",""); endif; if (nvCheck2) then LaunchApplication("http://www.taobao.com", "", "", SW_NORMAL, INFINITE, LAAW_OPTION_WAIT | LAAW_OPTION_USE_SHELLEXECUTE ); endif; if (nvCheck3) then LaunchApp(SUPPORTDIR ^ "Setup.exe",""); endif; endif; Disable(STATUSEX); end;