交流
功能说明:该程序是一个运行于易语言环境下的轻量级MP3音频播放工具,核心功能是**无需将MP3文件保存到磁盘,直接从内存字节集加载并播放MP3音频**。程序通过深度系统级干预实现这一目标:它使用APIHOOK技术对Windows底层函数CreateFileA进行钩子(Hook)拦截,当媒体播放组件(如易语言内置的同步播放MP3函数)尝试以文件路径方式打开MP3时,程序会识别该路径实为内存中MP3数据的CRC32哈希标识,并动态创建匿名管道(Pipe)模拟一个“虚拟文件句柄”,将内存中的MP3字节集实时写入管道读端,从而欺骗播放器认为正在读取一个真实磁盘文件。整个流程完全绕过文件系统,避免I/O开销与临时文件残留。
程序主界面包含基础播放控制按钮(播放、暂停、继续、停止)及进度滑块(滑块条1),支持实时反馈播放位置(通过_反馈标签_反馈事件更新滑块位置)。其核心逻辑封装在三个关键公开子程序中:LoadMemMp3(根据字节集生成唯一CRC32标识并缓存至MemMp3Info数组)、FreeMemMp3(按标识释放指定内存MP3)、FreeMemAllMp3(清空全部缓存)。后台通过APIHOOK类完成对kernel32.dll中CreateFileA的动态劫持与还原,确保钩子安全安装/卸载,并兼容多实例内存MP3管理。程序命名注释“播放内存中的MP3 -- 作者:易语言我吃了”亦印证其设计初衷——解决易语言传统播放需依赖物理文件路径的限制,提供一种更灵活、隐蔽、高效的嵌入式音频播放方案,适用于软件内嵌音效、加密资源播放、免文件分发等场景。
======窗口程序集1
| |
| |------ _播放_被单击
| |
| |------ _反馈标签_反馈事件
| |
| |------ _暂停_被单击
| |
| |------ _继续_被单击
| |
| |------ _停止_被单击
======程序集1
| |
| |------ _启动子程序
| |
| |------ _临时子程序
| |
| |------ LoadMemMp3
| |
| |------ FreeMemMp3
| |
| |------ FreeMemAllMp3
| |
| |------ NewCreateFile
| |
| |
======APIHOOK
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 安装APIHOOK
| |
| |------ 卸载APIHOOK
| |
| |
======调用的Dll
| |
| |---[dll]------ VirtualProtect
| |
| |---[dll]------ LoadLibrary
| |
| |---[dll]------ GetProcAddress
| |
| |---[dll]------ CloseHandle
| |
| |---[dll]------ CreatePipe
| |
| |---[dll]------ WriteFile
| |
| |---[dll]------ RtlComputeCrc32
| |
| |---[dll]------ CreateFile
======窗口程序集1
| |
| |------ _按钮1_被单击
| |
| |------ _按钮2_被单击
| |
| |------ _按钮3_被单击
| |
| |------ _按钮4_被单击
======窗口程序集1
| |
| |------ 添加图片
| |
| |------ _按钮1_被单击
| |
| |------ _按钮3_被单击
| |
| |------ _按钮2_被单击
======窗口程序集1
| |
| |------ __启动窗口_创建完毕
| |
| |------ __启动窗口_将被销毁
| |
| |------ _超级列表框1_被双击
| |
| |------ 加载相册
| |
| |------ 读取大图
| |
| |------ __启动窗口_首次激活
| |
| |------ _超级列表框1_当前表项被改变
| |
| |------ __启动窗口_尺寸被改变
| |
| |------ _时钟1_周期事件
| |
| |------ _工具条1_被单击
| |
| |------ 百叶窗效果
| |
| |------ 随机线效果_水平
| |
| |------ 随机线效果_垂直
| |
| |------ 棋盘效果
| |
| |------ 收缩效果
| |
| |------ 擦除效果
| |
| |------ 溶解效果
| |
| |
======程序集1
| |
| |------ 开启图片组扩展功能
| |
| |------ 关闭图片组扩展功能
| |
| |
======调用的Dll
| |
| |---[dll]------ GdiplusStartup
| |
| |---[dll]------ GdiplusShutdown
| |
| |---[dll]------ GdipLoadImageFromFile
| |
| |---[dll]------ GdipDisposeImage
| |
| |---[dll]------ MultiByteToWideChar
| |
| |---[dll]------ GdipGetImageThumbnail
| |
| |---[dll]------ GdipCreateHBITMAPFromBitmap
| |
| |---[dll]------ ImageList_Create
| |
| |---[dll]------ SendMessageA
| |
| |---[dll]------ ImageList_Add
| |
| |---[dll]------ DeleteObject
| |
| |---[dll]------ GetObjectA
| |
| |---[dll]------ GetClientRect
| |
| |---[dll]------ ImageList_Destroy
| |
| |---[dll]------ GetDC
| |
| |---[dll]------ CreateCompatibleDC
| |
| |---[dll]------ CreateCompatibleBitmap
| |
| |---[dll]------ CreatePatternBrush
| |
| |---[dll]------ SelectObject
| |
| |---[dll]------ ReleaseDC
| |
| |---[dll]------ CallWindowProc
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。