Media Player Classic-HC绿色版制作教程:便携化配置与注册表清理

Media Player Classic-HC绿色版制作教程:便携化配置与注册表清理

【免费下载链接】mpc-hc Media Player Classic 【免费下载链接】mpc-hc 项目地址: https://gitcode.com/gh_mirrors/mp/mpc-hc

1. 引言:为什么需要绿色版MPC-HC?

你是否曾遇到过以下痛点:在多台电脑间切换时,精心配置的Media Player Classic-Home Cinema(MPC-HC)设置无法同步?每次重装系统后都要重新调整播放器参数?作为开源媒体播放器的佼佼者,MPC-HC以其轻量化设计和强大解码能力深受用户喜爱,但默认安装模式会在系统注册表中留下配置信息,导致便携性不足。本文将系统讲解如何制作真正意义上的MPC-HC绿色版,实现"即插即用"的使用体验,同时提供注册表清理方案,保护系统环境纯净。

读完本文你将获得:

  • 掌握MPC-HC配置文件重定向技术
  • 学会制作可移植的绿色版播放器
  • 了解注册表清理的完整流程
  • 获取自动化配置工具的实现方法

2. MPC-HC配置系统工作原理

2.1 配置存储机制分析

MPC-HC采用多层次配置存储架构,主要包括:

mermaid

关键代码实现位于src/mpc-hc/AppSettings.cpp中:

void CAppSettings::LoadSettings() {
    // 从注册表加载基础配置
    if (m_pszRegistryKey) {
        LoadRegistrySettings();
    }
    // 从INI文件加载覆盖配置
    if (m_pszIniFile) {
        LoadIniSettings();
    }
    // 应用命令行参数
    ApplyCommandLineOverrides();
}

void CAppSettings::SaveSettings(bool write_full_history) {
    // 根据运行模式决定保存位置
    if (IsPortableMode()) {
        SaveIniSettings();
    } else {
        SaveRegistrySettings();
        if (write_full_history) {
            SaveHistoryToRegistry();
        }
    }
}

2.2 便携模式检测逻辑

MPC-HC在启动时会通过以下逻辑判断是否启用便携模式:

bool CAppSettings::IsPortableMode() const {
    // 检查命令行参数
    if (m_bPortableModeForced) return true;
    
    // 检查应用程序目录是否存在配置文件
    CString iniPath;
    if (GetModuleIniPath(iniPath) && PathFileExists(iniPath)) {
        return true;
    }
    
    // 检查注册表便携模式标记
    if (m_pszRegistryKey) {
        return GetRegValueBool(HKEY_CURRENT_USER, m_pszRegistryKey, _T("PortableMode"), false);
    }
    
    return false;
}

3. 绿色版制作准备工作

3.1 必要工具与文件

制作绿色版MPC-HC需要准备以下资源:

工具/文件用途获取途径
MPC-HC源代码编译可移植版本https://gitcode.com/gh_mirrors/mp/mpc-hc
Visual Studio 2022编译环境微软官方网站
Inno Setup打包工具Inno Setup官网
Resource Hacker图标资源修改开源资源站
7-Zip压缩绿色包7-Zip官网

3.2 编译环境配置

首先克隆并准备源代码:

# 克隆仓库
git clone https://gitcode.com/gh_mirrors/mp/mpc-hc.git
cd mpc-hc

# 初始化子模块
git submodule init
git submodule update

# 应用便携模式补丁
patch -p1 < portable_mode.patch

编译配置修改:在src/mpc-hc/AppSettings.cpp中修改默认行为:

// 修改前
bool CAppSettings::IsPortableMode() const {
    return m_bPortableModeForced || (m_pszIniFile && PathFileExists(m_pszIniFile));
}

// 修改后
bool CAppSettings::IsPortableMode() const {
    // 默认启用便携模式检测
    return m_bPortableModeForced || 
           (m_pszIniFile && PathFileExists(m_pszIniFile)) ||
           // 新增:检测程序目录下的portable.txt标记文件
           PathFileExists(PathCombine(GetExePath(), _T("portable.txt")));
}

4. 便携化配置实现步骤

4.1 编译可移植版本

使用Visual Studio打开解决方案:

mpc-hc.sln

修改项目属性:

  1. 在"配置属性"→"C/C++"→"预处理器"中添加PORTABLE_BUILD宏定义
  2. 在"链接器"→"命令行"中添加/ENTRY:WinMainCRTStartup确保正确入口点
  3. 选择"Release"配置和"x86/x64"平台,执行"生成解决方案"

编译成功后,在bin\Release目录下会生成基础可执行文件。

4.2 配置文件重定向

创建以下目录结构:

MPC-HC_Portable/
├── mpc-hc.exe           # 主程序
├── mpc-hc.ini           # 配置文件
├── portable.txt         # 便携模式标记
├── Codecs/              # 解码器目录
│   ├── LAVFilters/      # LAV解码器套件
│   └── madVR/           # madVR渲染器
├── Profiles/            # 预设配置文件
│   ├── cinema.xml       # 影院模式
│   └── gaming.xml       # 游戏模式
└── Skins/               # 皮肤文件
    ├── Black/
    └── Classic/

关键配置文件mpc-hc.ini示例:

[Settings]
Portable=1
SaveToIni=1
IniPath=.\mpc-hc.ini
SubtitlePath=.\Subtitles
ScreenshotPath=.\Screenshots

[DirectShow]
AutoLoadSubtitles=1
SubtitleLanguage=en,zh-CN
PreferDefaultSubtitle=1

[VideoRenderer]
Renderer=madVR
D3D9Ex=1
VSync=1

4.3 解码器便携化

LAV Filters解码器便携化配置:

  1. 将LAVFilters的3个核心文件复制到Codecs\LAVFilters目录:

    • LAVAudio.ax
    • LAVVideo.ax
    • LAVSplitter.ax
  2. 创建lavfilters.ini配置文件:

[LAVVideo]
HWAccel=dxva2
Deinterlace=1
DeinterlaceMethod=yadif

[LAVAudio]
Normalize=1
OutputFormat=float32
AudioDelay=0

[LAVSplitter]
PreferMatroska=1
EnableDTSHD=1
EnableTrueHD=1
  1. 在MPC-HC中配置自定义滤镜路径:
// 在src/mpc-hc/FGManager.cpp中修改滤镜加载逻辑
CFGFilter* LookupFilterRegistry(const GUID& guid, CAtlList<CFGFilter*>& list, UINT64 fallback_merit) {
    // 优先从本地目录加载滤镜
    CString filterPath = PathCombine(GetExePath(), _T("Codecs"));
    if (PathFileExists(filterPath)) {
        CFGFilter* pLocalFilter = LoadLocalFilter(filterPath, guid);
        if (pLocalFilter) return pLocalFilter;
    }
    // 回退到系统注册表查找
    return DEBUG_NEW CFGFilterRegistry(guid, fallback_merit);
}

5. 注册表清理方案

5.1 注册表项分析

MPC-HC在系统中创建的主要注册表项位于:

HKEY_CURRENT_USER\Software\MPC-HC
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MPC-HC
HKEY_CLASSES_ROOT\Applications\mpc-hc.exe
HKEY_CLASSES_ROOT\mpc-hc.mpchc

这些键值存储了以下信息:

  • 最近打开的文件历史记录
  • 窗口位置和尺寸设置
  • 解码器关联配置
  • 文件类型关联信息

关键代码位于src/mpc-hc/mplayerc.cpp

bool CMPlayerCApp::StoreSettingsToRegistry() {
    // 设置注册表键路径
    SetRegistryKey(_T("MPC-HC"));
    
    // 保存窗口状态
    WINDOWPLACEMENT wp;
    m_pMainFrame->GetWindowPlacement(&wp);
    AfxGetApp()->WriteProfileBinary(_T("Window"), _T("Placement"), 
                                   (LPBYTE)&wp, sizeof(WINDOWPLACEMENT));
    
    // 保存最近文件列表
    SaveRecentFilesToRegistry();
    
    return true;
}

5.2 手动清理步骤

创建注册表清理脚本cleanup.reg

Windows Registry Editor Version 5.00

; 删除用户配置
[-HKEY_CURRENT_USER\Software\MPC-HC]

; 删除文件关联
[-HKEY_CLASSES_ROOT\Applications\mpc-hc.exe]
[-HKEY_CLASSES_ROOT\mpc-hc.mpchc]

; 删除卸载信息
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MPC-HC]

; 删除Shell集成
[-HKEY_CLASSES_ROOT\*\shell\Play with MPC-HC]

使用方法:

  1. 将以上内容保存为cleanup.reg
  2. 右键点击文件,选择"合并"
  3. 在弹出的确认对话框中点击"是"
  4. 重启电脑使更改生效

5.3 自动化清理工具

创建C++清理工具,关键代码实现:

#include <windows.h>
#include <shlwapi.h>
#include <tchar.h>

#pragma comment(lib, "shlwapi.lib")

// 注册表键路径数组
const TCHAR* g_regPaths[] = {
    _T("Software\\MPC-HC"),
    _T("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MPC-HC"),
    _T("Classes\\Applications\\mpc-hc.exe"),
    _T("Classes\\mpc-hc.mpchc")
};

bool DeleteRegistryKey(HKEY hRootKey, LPCTSTR lpSubKey) {
    // 递归删除子键
    HKEY hKey;
    if (RegOpenKeyEx(hRootKey, lpSubKey, 0, KEY_ENUMERATE_SUB_KEYS | DELETE, &hKey) == ERROR_SUCCESS) {
        TCHAR szSubKey[MAX_PATH];
        DWORD dwSize = MAX_PATH;
        
        while (RegEnumKeyEx(hKey, 0, szSubKey, &dwSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
            TCHAR szFullSubKey[MAX_PATH];
            _stprintf_s(szFullSubKey, _T("%s\\%s"), lpSubKey, szSubKey);
            DeleteRegistryKey(hRootKey, szFullSubKey);
            dwSize = MAX_PATH;
        }
        
        RegCloseKey(hKey);
    }
    
    // 删除当前键
    return RegDeleteKey(hRootKey, lpSubKey) == ERROR_SUCCESS;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    // 删除HKCU下的键
    for (int i = 0; i < _countof(g_regPaths); i++) {
        DeleteRegistryKey(HKEY_CURRENT_USER, g_regPaths[i]);
    }
    
    // 删除HKLM下的键(需要管理员权限)
    DeleteRegistryKey(HKEY_LOCAL_MACHINE, g_regPaths[1]);
    
    // 删除用户配置目录
    TCHAR szAppData[MAX_PATH];
    if (SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, szAppData) == S_OK) {
        PathAppend(szAppData, _T("MPC-HC"));
        SHFileOperation(&SHFILEOPSTRUCT{
            NULL, FO_DELETE, szAppData, NULL,
            FOF_NO_UI | FOF_NOCONFIRMATION | FOF_SILENT
        });
    }
    
    MessageBox(NULL, _T("MPC-HC注册表清理完成!"), _T("清理工具"), MB_OK | MB_ICONINFORMATION);
    return 0;
}

6. 高级优化与定制

6.1 配置同步与备份

实现配置自动备份功能,创建backup_config.bat

@echo off
setlocal enabledelayedexpansion

set "BACKUP_DIR=.\Backups\%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%"
mkdir "!BACKUP_DIR!" 2>nul

:: 备份配置文件
copy /y ".\mpc-hc.ini" "!BACKUP_DIR!" >nul
copy /y ".\Codecs\LAVFilters\lavfilters.ini" "!BACKUP_DIR!" >nul

:: 备份注册表设置(如需)
reg export "HKCU\Software\MPC-HC" "!BACKUP_DIR!\registry_backup.reg" /y >nul

echo 配置已备份至:!BACKUP_DIR!
timeout /t 3 /nobreak >nul

6.2 自定义右键菜单集成

创建add_context_menu.reg文件:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Play with MPC-HC Portable]
"Icon"="\"%~dp0mpc-hc.exe\",0"
"MUIVerb"="Play with MPC-HC Portable"

[HKEY_CLASSES_ROOT\*\shell\Play with MPC-HC Portable\command]
@="\"%~dp0mpc-hc.exe\" \"%1\""

[HKEY_CLASSES_ROOT\Directory\shell\Play with MPC-HC Portable]
"Icon"="\"%~dp0mpc-hc.exe\",0"
"MUIVerb"="Play with MPC-HC Portable"

[HKEY_CLASSES_ROOT\Directory\shell\Play with MPC-HC Portable\command]
@="\"%~dp0mpc-hc.exe\" /open \"%1\""

使用相对路径转换工具,确保注册表项指向当前目录:

// 转换相对路径为绝对路径
CString GetAbsolutePath(LPCTSTR lpRelativePath) {
    TCHAR szFullPath[MAX_PATH];
    GetFullPathName(lpRelativePath, MAX_PATH, szFullPath, NULL);
    return szFullPath;
}

// 创建动态注册表脚本
void GenerateContextMenuScript() {
    CString strExePath = GetAbsolutePath(_T("mpc-hc.exe"));
    CString strRegScript;
    
    strRegScript.Format(
        _T("Windows Registry Editor Version 5.00\r\n\r\n")
        _T("[HKEY_CLASSES_ROOT\\*\\shell\\Play with MPC-HC Portable]\r\n")
        _T("\"Icon\"=\"\\\"%s\\\",0\"\r\n")
        _T("\"MUIVerb\"=\"Play with MPC-HC Portable\"\r\n\r\n")
        _T("[HKEY_CLASSES_ROOT\\*\\shell\\Play with MPC-HC Portable\\command]\r\n")
        _T("@=\"\\\"%s\\\" \\\"%%1\\\"\"\r\n"),
        strExePath, strExePath);
    
    WriteTextFile(_T("add_context_menu.reg"), strRegScript);
}

7. 总结与展望

7.1 完整绿色版文件结构

MPC-HC_Portable/
├── mpc-hc.exe           # 主程序
├── mpc-hc.ini           # 主配置文件
├── portable.txt         # 便携模式标记
├── cleanup.reg          # 注册表清理脚本
├── add_context_menu.reg # 右键菜单添加工具
├── backup_config.bat    # 配置备份脚本
├── Codecs/              # 解码器目录
│   ├── LAVFilters/      # LAV解码器
│   └── madVR/           # madVR渲染器
├── Profiles/            # 预设配置
├── Skins/               # 皮肤文件
├── Subtitles/           # 字幕存储目录
├── Screenshots/         # 截图保存目录
└── Backups/             # 配置备份目录

7.2 自动化绿色版生成工具

为简化制作流程,可开发批处理或PowerShell脚本自动完成上述步骤:

# MPC-HC绿色版生成器.ps1
param(
    [string]$SourceDir = ".\src",
    [string]$OutputDir = ".\MPC-HC_Portable"
)

# 创建输出目录
New-Item -ItemType Directory -Path $OutputDir -Force | Out-Null

# 复制核心文件
Copy-Item -Path "$SourceDir\bin\Release\*" -Destination $OutputDir -Recurse -Force

# 创建配置文件
@"
[Settings]
Portable=1
SaveToIni=1
IniPath=.\mpc-hc.ini
"@ | Out-File -FilePath "$OutputDir\mpc-hc.ini" -Encoding Unicode

# 创建便携模式标记
New-Item -ItemType File -Path "$OutputDir\portable.txt" -Force | Out-Null

# 复制解码器
Copy-Item -Path "$SourceDir\codecs\*" -Destination "$OutputDir\Codecs" -Recurse -Force

Write-Host "绿色版MPC-HC生成成功:$OutputDir"

7.3 注意事项与最佳实践

  1. 兼容性考虑

    • 确保使用与系统匹配的32位/64位版本
    • 解码器与主程序架构保持一致
    • 避免使用系统特定的API调用
  2. 安全建议

    • 仅从官方或可信来源获取解码器组件
    • 定期更新绿色版组件以修复安全漏洞
    • 使用前扫描文件完整性
  3. 性能优化

    • 禁用不需要的滤镜和插件
    • 根据硬件配置调整渲染器设置
    • 定期清理缓存文件

8. 结语

通过本文介绍的方法,你已掌握将MPC-HC转换为绿色版的完整技术方案。这种便携化配置不仅解决了多设备间的设置同步问题,还能有效保护系统环境免受注册表冗余信息的影响。随着媒体播放技术的不断发展,我们期待MPC-HC官方能提供更完善的原生便携模式支持。

你是否已经成功制作了自己的MPC-HC绿色版?欢迎在评论区分享你的经验和优化方案。如需获取最新版绿色版制作工具,请关注项目GitHub仓库的更新。

请点赞、收藏本文,以便日后查阅。下期预告:《MPC-HC高级滤镜链配置指南》


附录:常用配置参数参考

配置项取值范围说明
VideoRendererEVR, madVR, VMR9视频渲染器选择
AudioRendererDefault, WASAPI, DirectSound音频输出方式
SubtitleFont系统字体名称字幕显示字体
FrameRateControlDefault, VFR, CFR帧率控制模式
HWAccelerationAuto, DXVA2, D3D11硬件加速设置
ScreenshotFormatBMP, PNG, JPG截图文件格式
VolumeBoost100-200音量增强百分比
AspectRatioAuto, 16:9, 4:3, Custom画面比例设置
DeinterlaceModeAuto, YADIF, Bob, Weave去隔行处理方式
PlaybackSpeed0.5-4.0播放速度倍率

【免费下载链接】mpc-hc Media Player Classic 【免费下载链接】mpc-hc 项目地址: https://gitcode.com/gh_mirrors/mp/mpc-hc

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值