Inno调用dll --- 实现背景播放音乐
Inno 播放音乐可以调用系统api函数mciSendString来实现,而mciSendString函数存在C:\Windows\System32\winmm.dll中,因此最终只要成功从该dll文件中导出mciSendString函数,并在安装界面显示的同时正确的调用该函数,即可实现背景播放音乐的效果。
1、添加背景音乐资源
在[Files]段添加下面语句:
Source: "bg.mp3"; flags: dontcopy ;
将音乐文件改名为bg.mp3,放到工程文件同目录下。dontcopy 标志表示安装时此文件不拷贝,默认存在于{tmp}目录下,在软件安装完成后会被删除。
2、从winmm.dll导出mciSendString函数
在[code]段添加下面语句:
function mciSendString(lpszCommand: String; lpszReturnString: Integer; cchReturnLength: Integer; hwndCallback: Integer): Integer;
external 'mciSendStringA@winmm.dll stdcall';
第一句可以理解为函数定义,第二句是该函数的补充,表示定义的函数是外部函数,原型是从winmm.dll中导出的mciSendStringA函数,采用stdcall函数调用约定。此外,如果Inno编译器版本是unicode版本,则导出的函数对应的原型应该是mciSendStringW,第二句则应修改为:external 'mciSendStringW@winmm.dll stdcall';
3、使用导出函数播放背景音乐
背景音乐可以在安装界面初始化的时候开启播放,因此可以选择在[code]段中实现回调函数InitializeSetup来调用mciSendString函数过程。以下是调用过程:
mciSendString(ExpandConstant('open {tmp}\bg.mp3 alias bg'),0,0,0);
mciSendString(ExpandConstant('play bg repeat'),0,0,0);
4、完整代码
; 脚本由 Inno Setup 脚本向导 生成!
; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define MyAppName "我的程序"
#define MyAppVersion "1.5"
#define MyAppPublisher "我的公司"
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe" [Setup]
; 注: AppId的值为单独标识该应用程序。
; 不要为其他安装程序使用相同的AppId值。
; (生成新的GUID,点击 工具|在IDE中生成GUID。)
AppId={{230CCD19-DFE0-4D57-A14D-A3AE3AED90EE}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes [Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl" [Files]
;Source: "C:\Program Files (x86)\Inno Setup \Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "bg.mp3"; flags: dontcopy ;
; 注意: 不要在任何共享系统文件上使用“Flags: ignoreversion” [code]
function mciSendString(lpszCommand: String; lpszReturnString: Integer; cchReturnLength: Integer; hwndCallback: Integer): Integer;
external 'mciSendStringA@winmm.dll stdcall';//unicode版本用 mciSendStringW ansi版本用mciSendStringA function InitializeSetup (): Boolean;
begin
ExtractTemporaryFile(ExtractFileName(ExpandConstant('{tmp}\bg.mp3'))); //提前抽取该文件
mciSendString(ExpandConstant('open {tmp}\bg.mp3 alias bg'),,,); //打开媒体文件,alias别名为bg
mciSendString(ExpandConstant('play bg repeat'),,,); //重复播放(别)名为bg.mp3的媒体文件
Result := True; //返回true才会继续安装
end;
Inno调用dll --- 实现背景播放音乐的更多相关文章
- delphi中使用mediaplayer控件播放音乐
新建一个名字为media的文件夹,把要播放的音乐文件放在这个文件夹里. ExtractFilePath是用来获得产生的可执行程式所在的路径,因为我们把要播放的音乐文件放在了可执行程式的那个根目录下. ...
- C# 调用系统winmm.dll 播放音乐wav mp3
using System.Runtime.InteropServices;//放wav public partial class frmMain : Form { 系统放 播放音乐 wav mp3 [ ...
- 以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转)
以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转) ; Script generated by the Inno Setup 脚本向导. ; SEE THE DOCU ...
- C#播放音乐,调用程序
一:C# 播放音乐 string sound = Application.StartupPath + "/sound/msg.wav"; //Application.Startup ...
- [Xcode 实际操作]六、媒体与动画-(16)实现音乐的背景播放
目录:[Swift]Xcode实际操作 本文将演示音乐的背景播放功能 打开项目信息配置文件[info.plist]. 需要在配置文件中进行一些操作,使程序支持音乐的背景播放. 点击鼠标右键,弹出右键菜 ...
- Android-AIDL调用Android操作系统Music的方式来播放音乐
Android操作系统Music源码修改:把包名,各种命名都修改成自己的 修改Android操作系统Music源码,把后台播放核心服务对外暴漏: <!-- 核心服务 --> <!-- ...
- go语言让windows发出声音,或者播放音乐
go语言让windows发出声音,或者播放音乐的例子:会发出alert警告的声音 ( 这是我应群员的求助写的, 如果你需要了解其中的调用原理或过程 或更多go语言调用win32api的资料,加群: 2 ...
- C++ Builder创建和调用dll中的资源
程序开发中经常会用到一些图标.图片.光标.声音等,我们称它们为资源(Resource).当多个窗口用到同样的资源时,可以将这些公共的资源放到一个dll文件里调用,这样,由于定位资源比在磁盘中定位文件花 ...
- matlab播放音乐
最近在做计算,写了一些matlab代码,脑壳还疼,所以决定发挥一下逗B精神,写一个程序玩一下. 想了想,既然写代码的时候喜欢听歌,而且我的电脑打开网易音乐的速度巨慢(不知道为什么..),那些一个程序直 ...
随机推荐
- 选择c3p0作为连接池
<hibernate-configuration> <session-factory> <property name="dialect& ...
- mysql 上传数据到指定字段
新建表prizecode,字段为code varchar(45) not null , usedAt TIMESTAMP;数据存放在 E:\prizecode\ 目录下,下面是上传语句 LOAD DA ...
- lua闭合函数
function count( ... ) return function( ... ) i = i+ return i end end local func = count(...) print(f ...
- Sharepoint创建List
(一)在一个环境下创建site 首先在sharepoint 2013 Central Administration中run administration --Application Managemen ...
- window常用命令
netstat -ano|findstr "端口号" :查看指定端口信息[netstat -ano|findstr "端口号" ] ,然后看下PID号 ...
- Oracle统计函数之Lead
一,Lead 语法及例子 Lead函数是十分的好用的一个函数.它的语法如下图: 简单地说,lead是个奇特函数,在允许不使用自连接的情况下,一次返回多行. 参数说明: value_expr 值表达式, ...
- ASP.NET MVC分页组件MvcPager 2.0版发布暨网站全新改版
MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList< ...
- ASP.NET c# textbox 正则表达式 文本框只允许输入数字(验证控件RegularExpressionValidator )
<input type="text" name="test" onKeyUp="test1.value=(this.value=this.val ...
- linux split 命令 将一个大的文件拆分成若干小文件
. 以行数拆分 -l 参数: 原始文件 拆分后文件名前缀 例:以50行对文件进行拆分 big.txt small_ 拆分后会生成 small_aa small_ab small_ac ... . 以大 ...
- ftp 服务器搭建和添加用户和目录
安装: yum install -y vsftpd 修改配置: vsftpd.conf 修改:anonymous_enable=YES 改为:anonymous_enable=NO 启动/停止/重启 ...