Inno Setup 编程技术全图文教程
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net ?http://www.caodi.name/blog/innosetup_pic.html ? 初级教程 [Files] Source: "C:纸莎草书繁体中文破解版game.exe"; DestDir: "{app}"; Flags: ignoreversion ;游戏生成的快捷方式所指原执行文件 Source: "C:纸莎草书繁体中文破解版*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ;要打包的目录 [Languages] Name: "chinesesimp"; MessagesFile: "compiler:LanguagesChineseSimp.isl" ;语言中性 [Icons] Name: "{group}纸莎草书繁体中文破解版"; Filename:"{app}game.exe";WorkingDir:"{app}" ;生成开始菜单游戏可执行程序game.exe是你目录下的可执行文件 WorkingDir: {app}”WorkingDir后面加{app} app的意思是随安装目录生成 Name: "{group}{cm:ProgramOnTheWeb,访问青空学园}"; Filename:" http://www.aoizora.com; WorkingDir: {app} " ;生成开始菜单网站 Name: "{group}{cm:UninstallProgram,纸莎草书繁体中文破解版}"; Filename: "{uninstallexe}; WorkingDir: {app}" ;生成开始菜单卸载 Name: "{commondesktop}纸莎草书繁体中文破解版"; Filename: "{app}game.exe"; Tasks: desktopicon;WorkingDir: "{app}" ;Tasks: desktopicon 任务:生成快捷方式 [Tasks] Name: changestartpage; Description: "设置青空学园为主页" Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked ;Tasks: desktopicon 任务:生成快捷方式 压缩方式的设置:默认是lzma [Setup] Compression=XXX XXX 表示压缩方式,目前的版本支持以下的压缩方式: zip ; 相当于 zip/7,是软件默认的压缩方式 zip/1 ; Zip 格式,压缩率最低,速度最快,耗内存最少 ...... zip/9 ; Zip 格式,压缩率最高,速度最慢,耗内存最大 bzip ; 相当于 bzip/9 bzip/1 ; BZip2 格式(压缩率高于 Zip 格式),压缩率最低,速度最快,耗内存最少 ...... bzip/9 ; BZip2 格式,压缩率最高,速度最慢,耗内存最大 lzma ; 相当于 lzma/max lzma/fast ; 7-Zip LZMA 格式(压缩率高于 Zip 和 BZip2 格式),压缩率低,速度快 lzma/normal ;7-Zip LZMA 格式,压缩率一般,速度一般 lzma/max ;7-Zip LZMA 格式,压缩率高,速度慢 lzma/ultra ;7-Zip LZMA 格式,超级压缩(谨慎使用,特别耗内存!!) none ;不压缩 让安装程序安装后随WINDOWS启动~这个感觉没必要 要娱乐一下的试试看? [Tasks] Name: "startup"; Description: "随 windwos 启动"; GroupDescription: "添加启动选" ;Takes建立任务类似快捷方式类的 [Registry] Root: HKCU; SubKey: SoftwareMicrosoftWindowsCurrentVersionRun; valueType: string; valueName: "fileBX"; valueData: "{app}fileBX.exe";Flags: uninsdeletevalue; Tasks: startup ;在注册表上修改随windows启动! 想把这2个图片换了?安装软件后目录有2个图片 你可以替换这2个头像就可以了。 WizModernSmallImage.bmp 这个右上方的网站标志(注意只是举例) WizModernImage.bmp 这个是左边的游戏图片 [Code] procedure URLLabelOnClick(Sender: TObject); var ErrorCode: Integer; begin ShellExec(‘open‘,‘http://www.aoizora.com/‘,‘‘,SW_SHOWNORMAL,ewNoWait,ErrorCode); end; procedure AboutButtonOnClick(Sender: TObject); begin MsgBox(‘^青空学园—多次元动漫游戏论坛^‘#13#10‘ http://www.aoizora.com‘,MB_OK); ;这是关于按钮里面的内容 #13#10是换行的意思 end; var AboutButton,CancelButton: TButton; URLLabel: TNewStaticText; procedure InitializeWizard(); begin { Create the pages } WizardForm.PAGENAMELABEL.Font.Color:= clred; WizardForm.PAGEDESCRIPTIONLABEL.Font.Color:= clBlue; WizardForm.WELCOMELABEL1.Font.Color:= clGreen; WizardForm.WELCOMELABEL2.Font.Color:= clblack; CancelButton := WizardForm.CancelButton; AboutButton := TButton.Create(WizardForm); AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width; AboutButton.Top := CancelButton.Top; AboutButton.Width := CancelButton.Width; AboutButton.Height := CancelButton.Height; AboutButton.Caption := ‘About‘; AboutButton.OnClick := @AboutButtonOnClick; AboutButton.Parent := WizardForm; URLLabel := TNewStaticText.Create(WizardForm); URLLabel.Caption := ‘『青空学园』‘; URLLabel.Cursor := crHand; URLLabel.OnClick := @URLLabelOnClick; URLLabel.Parent := WizardForm; { Alter Font *after* setting Parent so the correct defaults are inherited first } URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline]; URLLabel.Font.Color := clBlue; URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2; URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20); end; 默认勾选同意~急着安装?不用急这就是设定默认的同意! [Code] var Label2: TLabel; Label1: TLabel; CheckBox1: TCheckBox; NewStaticText1: TNewStaticText; procedure Cus_Next(Sender: TObject); begin if CheckBox1.Checked = True then WizardForm.LicenseAcceptedRadio.Checked := True else WizardForm.LicenseNotAcceptedRadio.Checked := True end; procedure InitializeWizard(); begin WizardForm.LicenseMemo.Height := 127; WizardForm.LicenseAcceptedRadio.visible := False; WizardForm.LicenseNotAcceptedRadio.visible := False; Label1 := TLabel.Create(WizardForm); Label1.Parent := WizardForm.LicensePage; Label1.Left := WizardForm.LicenseMemo.Left; Label1.Top := WizardForm.LicenseMemo.Top + WizardForm.LicenseMemo.Height + 7; Label1.Width := WizardForm.LicenseMemo.Width; Label1.Height := ScaleY(12); Label1.Caption := ‘如果您接受许可协议,点击下方的单选框。您必须接受协议才能安装 我的程序‘#13‘1.5。单击 [下一步 (N)] 继续。‘; CheckBox1 := TCheckBox.Create(WizardForm); CheckBox1.Parent := WizardForm.LicensePage; CheckBox1.Left := WizardForm.LicenseMemo.Left; CheckBox1.Top := WizardForm.LicenseMemo.Top + WizardForm.LicenseMemo.Height + 47; CheckBox1.Width :=WizardForm.LicenseMemo.Width; CheckBox1.Height := ScaleY(17); CheckBox1.Caption := ‘我同意“许可协议”中的条款(&A)‘; CheckBox1.TabOrder := 0; CheckBox1.OnClick := @Cus_Next; end; 去掉“关于安装程序”菜单 [code] const MF_BYPOSITION=$400; function DeleteMenu(HMENU: HWND; uPosition: UINT; uFlags: UINT): BOOL; external ‘[email?protected] stdcall‘; function GetSystemMenu(HWND: hWnd; bRevert: BOOL): HWND; external ‘[email?protected] stdcall‘; procedure InitializeWizard(); begin DeleteMenu(GetSystemMenu(wizardform.handle,false),8,MF_BYPOSITION); DeleteMenu(GetSystemMenu(wizardform.handle,7,MF_BYPOSITION); end; [Messages] ClickNext=单击“下一步”继续,或单击“取消”退出安装程序。%n%n%n%n%n%n%n此程序由yang8871/yangteng制作,对此程序保留权利%n欢迎加入青空学园: 左下方F.B.I标志 XXXX改为你的名字或组织均可! [Messages] BeveledLabel=XXXXXX 添加任务设定为主页,卸载游戏以后会自动访问青空学园,至于安装游戏自动添加到收藏夹就不弄了。因为系统不同的关系这个会出错~XP,VISTA默认的管理目录不同! [Tasks] Name: changestartpage; Description: "设置青空学园为主页" ;建立一个如上图的任务 [Registry] Root: HKCU; Subkey: "SoftwareMicrosoftInternet ExplorerMain"; ValueType: string; ValueName: "Start Page"; ValueData: "http://www.aoizora.com/"; tasks: changestartpage ;定义网站地址 上面的www.aoizora.com 改成你想要修改的网页即可 安装完成后想自动访问网站~ [CODE] procedure CurStepChanged(CurStep: TSetupStep); var ErrorCode: Integer; begin if CurStep=ssDone then ShellExec(‘open‘,‘http://www.aoizora.com ‘,ErrorCode); end; 安装、卸载时判断是否程序正在运行,卸载后自动打开网页 [code] var ErrorCode: Integer; IsRunning: Integer; // 安装时判断客户端是否正在运行 function InitializeSetup(): Boolean; begin Result :=true; //安装程序继续 IsRunning:=FindWindowByWindowName(‘东方宽频网络电视‘); while IsRunning<>0 do begin if Msgbox(‘安装程序检测到客户端正在运行。‘ #13#13 ‘您必须先关闭它然后单击“是”继续安装,或按“否”退出!‘,mbConfirmation,MB_YESNO) = idNO then begin Result :=false; //安装程序退出 IsRunning :=0; end else begin Result :=true; //安装程序继续 IsRunning:=FindWindowByWindowName(‘东方宽频网络电视‘); end; end; end; // 卸载时判断客户端是否正在运行 function InitializeUninstall(): Boolean; begin Result :=true; //安装程序继续 IsRunning:=FindWindowByWindowName(‘东方宽频网络电视‘); while IsRunning<>0 do begin if Msgbox(‘安装程序检测到客户端正在运行。‘ #13#13 ‘您必须先关闭它然后单击“是”继续安装,或按“否”退出!‘,MB_YESNO) = idNO then begin Result :=false; //安装程序退出 IsRunning :=0; end else begin Result :=true; //安装程序继续 IsRunning:=FindWindowByWindowName(‘东方宽频网络电视‘); end; end; end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin case CurUninstallStep of usUninstall: begin // 开始卸载 end; usPostUninstall: begin // 卸载完成 // MsgBox(‘CurUninstallStepChanged:‘ #13#13 ‘Uninstall just finished.‘,MB_OK); // ...insert code to perform post-uninstall tasks here... ShellExec(‘open‘,‘http://www.dreams8.com‘,ErrorCode); end; end; end; 颜色代码 颜色代码名称: clBlack(黑色),clMaroon(暗红),clGreen(绿色),clOlive(橄榄绿), clNavy(深蓝),clPurple(紫色),clTeal(深青),clGray(灰色), clSilver(浅灰),clRed(红色),clLime(浅绿),clYellow(黄色), clBlue(蓝色),clFuchsia(紫红),clAqua(青绿),clWhite(白色)。 这软件打包单个exe文件只能是2G一下。为了刻盘方便一般都是分割成600多m一个的 CD最大容量为700M。DVD则为4.7G 新版的2009卡巴斯基因为检测打开大型EXE文件特别慢。所以做成这样最好不过了~方便收藏安装! [Setup] 命令下面加可以了 DiskSpanning=true DiskSliceSize=645766400 这个是分割文件的大小! 自动写入注册表 有些部分是要手动注册的。以下功能可实现自动注册!说明一下一般注册表都是自己手动进入注册表寻找的 不过有些玩家要求 这里介绍一个软件(万象注册表分析工具)大家不妨一试 注册表监视器 用法:拖动exe安装程序到软件界面,安装结束后会弹出关于注册表变化的信息!大部分提取注册表适用,但是不排除有些游戏会出错! 下载地址 : 例如需要手动注册的注册表内容为: [HKEY_LOCAL_MACHINESoftwareNINELIVESPrincess Maker3CHT1.0] "InstPath"="C:美少女梦工厂3梦幻妖精简体中文XP版" 写入的内容应为: [Registry] Root: HKLM; SubKey: SOFTWARENINELIVES; Flags: uninsdeletekeyifempty Root: HKLM; SubKey: SOFTWARENINELIVESPrincess Maker3CHT; Flags: uninsdeletekeyifempty Root: HKLM; SubKey: SOFTWARENINELIVESPrincess Maker3CHT1.0; Flags: uninsdeletekeyifempty Root: HKLM; SubKey: SOFTWARENINELIVESPrincess Maker3CHT1.0; Flags: uninsdeletekey; ValueType: string; ValueName: InstPath; ValueData: {app} 不好意思各位我忽略了一些东西!本人不用ISTOOL的 基本上都是自己写!通过这个注册表工具可以提取注册表 或者自己到注册提取都可以! 然后用ISTOOL导入变成IS能识别的语言! 中级教程 启动安装弹出闪屏及音乐,关于按钮也写进去了~原创编写·不过这插件是由高人提取NISS的插件应用到inno中的,使inno比之niss制作更加美观简单!来吧!不懂慢慢看!解压到桌面就可以了写的时候也是默认桌面的~注意解压的时候解压名为NSISADDIN 加了一点原创标志所以解压后名字不同~注意不然就把下面的命令自己改下一样的 今天到此为止先。累了~ [Setup] AppName=我的程序 AppVerName=我的程序 1.5 版本 DefaultDirName={pf}我的程序 DefaultGroupName=我的程序 [Files] ; 打包实现闪屏和背景音乐所必需的插件文件 Source: "C:Documents and SettingsAdministrator桌面NSISADDINNSISADDINcallnsis.dll"; DestDir: "{tmp}"; Flags: dontcopy Source: "C:Documents and SettingsAdministrator桌面NSISADDINNSISADDINNewAdvSplash.dll"; DestDir: "{tmp}"; Flags: dontcopy Source: "C:Documents and SettingsAdministrator桌面NSISADDINNSISADDINBass.dll"; DestDir: "{tmp}"; Flags: dontcopy ; 打包闪屏和背景音乐素材文件:闪屏图像文件 bmp、gif 或者 jpg 格式, 音乐文件 MP3、WAV 格式 Source: "C:Documents and SettingsAdministrator桌面NSISADDINNSISADDINsplash.gif"; DestDir: "{tmp}"; Flags: dontcopy Source: "C:Documents and SettingsAdministrator桌面NSISADDINNSISADDINmymusic.mp3"; DestDir: "{tmp}"; Flags: dontcopy ; 以下打包软件本身的文件 ; 请自己加上 ; 以下是安装脚本的其它段代码 ; 请自己加上 [Code] Type HSAMPLE = DWORD; HCHANNEL = DWORD; var MusicSwitchLabel0,MusicSwitchLabel1,MusicSwitchLabel2: TNewStaticText; sample: HSAMPLE; channel: HCHANNEL; // 以下是所调用的插件函数 function BASS_Init(device: Integer; freq,flags: DWORD; win: HWND; clsid: string): Boolean; external ‘[email?protected]:BASS.dll stdcall delayload‘; procedure BASS_Free(); external ‘[email?protected]:BASS.dll stdcall delayload‘; function BASS_SampleLoad(mem: BOOL; f: PChar; offset,length,max,flags: DWORD): HSAMPLE; external ‘[email?protected]:BASS.dll stdcall delayload‘; function BASS_ChannelPlay(handle: DWORD; restart: BOOL): BOOL; external ‘[email?protected]:BASS.dll stdcall delayload‘; function BASS_ChannelPause(handle: DWORD): BOOL; external ‘[email?protected]:BASS.dll stdcall delayload‘; function BASS_SampleGetChannel(handle: HSAMPLE; onlynew: BOOL): HCHANNEL; external ‘[email?protected]:BASS.dll stdcall delayload‘; procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar); external ‘[email?protected]:callnsis.dll stdcall delayload‘; // 以下是点击“关于”按钮后的响应函数 procedure AboutButtonOnClick(Sender: TObject); begin MsgBox(‘这是你的信息。‘#13#10‘这是你的信息的第二行。‘,MB_OK); end; // 以下是点击“打开音乐”按钮后的响应函数 procedure MusicSwitchLabel1OnClick(Sender: TObject); begin BASS_ChannelPlay(channel,false); MusicSwitchLabel1.Font.Color := clGray; MusicSwitchLabel2.Font.Color := clBlue; end; // 以下是点击“关闭音乐”按钮后的响应函数 procedure MusicSwitchLabel2OnClick(Sender: TObject); begin BASS_ChannelPause(channel); MusicSwitchLabel2.Font.Color := clGray; MusicSwitchLabel1.Font.Color := clBlue; end; // 安装向导初始化函数 procedure InitializeWizard(); var AboutButton: TButton; BGMusicFile,SplashFile: string; begin // 创建“关于”按钮 AboutButton := TButton.Create(WizardForm); AboutButton.Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width; AboutButton.Top := WizardForm.CancelButton.Top; AboutButton.Width := WizardForm.CancelButton.Width; AboutButton.Height := WizardForm.CancelButton.Height; AboutButton.Caption := ‘关于(&A)...‘; AboutButton.OnClick := @AboutButtonOnClick; AboutButton.Parent := WizardForm; // 创建文字标签“音乐:” MusicSwitchLabel0 := TNewStaticText.Create(WizardForm); MusicSwitchLabel0.Left := AboutButton.Left + ScaleX(90); MusicSwitchLabel0.Top := WizardForm.CancelButton.Top + ScaleY(3); MusicSwitchLabel0.Width := ScaleX(30); MusicSwitchLabel0.Height := ScaleY(12); MusicSwitchLabel0.Font.Color := clRed; MusicSwitchLabel0.Caption := ‘音乐:‘; MusicSwitchLabel0.Parent := WizardForm; // 创建文字标签作为“打开音乐”按钮(采用 Webdings 字体中的播放符号) MusicSwitchLabel1 := TNewStaticText.Create(WizardForm); MusicSwitchLabel1.Left := MusicSwitchLabel0.Left + ScaleX(33); MusicSwitchLabel1.Top := MusicSwitchLabel0.Top - ScaleY(3); MusicSwitchLabel1.Width := ScaleX(20); MusicSwitchLabel1.Height := ScaleY(12); MusicSwitchLabel1.Font.Color := clGray; MusicSwitchLabel1.Font.Name := ‘webdings‘; MusicSwitchLabel1.Font.Size := -15; MusicSwitchLabel1.Cursor := crCross; MusicSwitchLabel1.Caption := #52 MusicSwitchLabel1.ShowHint:= true; MusicSwitchLabel1.Hint:= ‘打开音乐‘; MusicSwitchLabel1.OnClick := @MusicSwitchLabel1OnClick; MusicSwitchLabel1.Parent := WizardForm; // 创建文字标签作为“关闭音乐”按钮(采用 Webdings 字体中的暂停符号) MusicSwitchLabel2 := TNewStaticText.Create(WizardForm); MusicSwitchLabel2.Left := MusicSwitchLabel1.Left + ScaleX(20); MusicSwitchLabel2.Top := MusicSwitchLabel0.Top - ScaleY(3); MusicSwitchLabel2.Width := ScaleX(20); MusicSwitchLabel2.Height := ScaleY(12); MusicSwitchLabel2.Font.Color := clBlue; MusicSwitchLabel2.Font.Name := ‘webdings‘; MusicSwitchLabel2.Font.Size := -15; MusicSwitchLabel2.Cursor := crCross; MusicSwitchLabel2.Caption := #59 MusicSwitchLabel2.ShowHint:= true; MusicSwitchLabel2.Hint:= ‘关闭音乐‘; MusicSwitchLabel2.OnClick := @MusicSwitchLabel2OnClick; MusicSwitchLabel2.Parent := WizardForm; // 释放临时文件 ExtractTemporaryFile(‘BASS.dll‘); ExtractTemporaryFile(‘CallNSIS.DLL‘); ExtractTemporaryFile(‘NewAdvSplash.DLL‘); ExtractTemporaryFile(‘mymusic.mp3‘); ExtractTemporaryFile(‘splash.gif‘); BGMusicFile := ExpandConstant(‘{tmp}mymusic.mp3‘); SplashFile := ExpandConstant(‘{tmp}splash.gif‘); // 播放背景音乐 if not BASS_Init(-1,44100,‘‘) then BASS_Free; sample := BASS_SampleLoad(false,PChar(BGMusicFile),1,4); if sample<>0 then begin channel:= BASS_SampleGetChannel(sample,false); BASS_ChannelPlay(channel,true); end; // 闪屏:显示时间 1600、淡入 800、淡出 500、透明颜色 -2 (表示 gif 图像本身透明) callplug(0,ExpandConstant(‘{tmp}NewAdvSplash.dll‘),‘show‘,‘1600‘,‘800‘,‘500‘,‘-2‘,SplashFile,‘‘); // 以下是安装向导初始化函数的其它代码 // 请自己加上 end; // 以下是其它 CODE 段代码 水纹效果 附件: 您所在的用户组无法下载或查看附件 高级教程: 在安装界面的最上方会出现正在安装什么游戏?一层不变会让人厌倦来试试看这个?还有很多设定有兴趣的高手自己看看~ inno目录下有个Default.isl 打开编辑看看,这个是界面设定,最好先备份错了修改错了再覆盖回去 图片看看 [Messages] ; *** 应用程序标题 SetupAppTitle=正在安装中_请稍等(默认不是这个这个是我修改过的) SetupWindowTitle=正在安装中_请稍等- %1 UninstallAppTitle=卸载 UninstallAppFullTitle=%1 卸载 ? 再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |