在 Windows 上播放视频一直使用的是 MPC-HC 播放器,其文件小巧且支持格式众多,奈何自带的文件关联图标实在一般。如图所示:

默认关联图标

网上有很多好看的 KMPlayer、PotPlayer 的关联图标文件,多数为 dll 格式,可以用工具 ResourcesExtract 从其中提取图标出来。今天特地研究了下怎样可以将这些图标用于 MPC-HC。下面是这里所用到的图标截图(该图标原文件来源于网上,若有侵权,烦请告知):

自定义关联图标

下载当前最新的 MPC-HC 的源代码,其版本为 1.7.10,然后解压。经察看可知,MPC-HC 的关联图标都在目录 mpc-hc-1.7.10/src/mpc-hc/mpciconlib/icons 下,稍后会被编译成文件 mpciconlib.dll。将上述由其他文件中提取出的图标放在这个目录下,同时修改对应的文件名。

接下来就是准备编译这些图标文件了,需要已安装 VS2013,不过若是没有的话,用 VS2010 也可以。

在运行编译命令前,还需要修改一个源文件。默认情况下,rmvb 类型的图标会被当作其他类型对待,可以修改文件 mpc-hc-1.7.10/src/mpc-hc/mpciconlib/mpciconlib.cpp,将 IDI_OTHER_ICON 改为 IDI_RM_ICON

...
    } else if (_tcsicmp(ext, _T(".rmvb")) == 0) {
        iconIndex = IDI_RM_ICON;
...

若已安装了 VS2013,则可以使用官方提供的脚本直接编译,不过需要首先去掉依赖检查,即注释掉 mpc-hc-1.7.10/build.bat 中的下面一行:

REM CALL "%COMMON%" :SubPreBuild

然后运行命令如下:

C:\mpc-hc-1.7.10 > build.bat IconLib Both

否则,使用下面的方法编译。

首先根据源代码中给出的编译脚本文件 mpc-hc-1.7.10/build.bat,提取出编译关联图标的命令如下,:

编译32位平台:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe mpciconlib.sln /nologo /consoleloggerparameters:Verbosity=minimal /maxcpucount /nodeReuse:true /target:Build /property:Configuration=Release;Platform=Win32

编译64位平台:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe mpciconlib.sln /nologo /consoleloggerparameters:Verbosity=minimal /maxcpucount /nodeReuse:true /target:Build /property:Configuration=Release;Platform=x64

由于这里使用的是 VS2010,而非官方推荐的 VS2013,所以运行上述命令后会出错,错误信息如下所示:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(518,5):
error MSB8008: Specified platform toolset (v120_xp) is not installed or invalid. Please make sure that a supported PlatformToolset value is selected.
[C:\test\mpc-hc-1.7.10\src\mpc-hc\mpciconlib\mpciconlib.vcxproj]

此时,可以修改文件 mpc-hc-1.7.10/src/platform.props,注释掉其中有关 PlatformToolset 的两句代码:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Label="Configuration">
<!--
    <PlatformToolset Condition="'$(ANALYZE)'!='true'">v120_xp</PlatformToolset>
    <PlatformToolset Condition="'$(ANALYZE)'=='true'">v120</PlatformToolset>
-->
  </PropertyGroup>
</Project>

现在再次运行命令编译,成功通过。生成的文件 mpciconlib.dll 位于目录 mpc-hc-1.7.10/bin/mpc-hc_x86(用于32位平台)或者 mpc-hc-1.7.10/bin/mpc-hc_x64(用于64位平台)下。

这里是已编译好的文件,包含32位和64位平台的,将其放到 MPC-HC 的目录下,在设置里重新运行关联即可。

(完)