{S0}简介
有一些非常有用的实用程序,延长MP3和其它媒体文件,如{A},周围的外壳功能。他们整合到Windows shell本身的媒体文件的元数据预览和编辑,而不需要任何外部应用程序。壳的最明显的例子,延长的标题和艺术家信息的媒体文件的元数据,如的预览。
同样的想法来自这篇文章。本文给出了一个外壳扩展,增加了信息提示预览PLS,M3U,M3U8音乐播放。 PLS(Winamp的引入)和m3u是最广泛的播放列表格式,WINAMP,Windows媒体播放器,和许多其他球员的支持。 M3U和PLS不支持Unicode,其中有M3U8,UTF8扩展M3U文件格式。Vista的壳牌
XP和Vista infotips之间有一个关键的区别。虽然在XP提示信息的字符数不限量,Vista中设置显示字符的最大数量的限制。 Vista的infotips是有限的大约900个字符,即约15排在第16行,每行5个字符65个字符,在这个截图(从一个特殊的测试,产生了长期的信息提示字符串):
这是很难说,如果换行字符('\ N')计数,但他们可能是。
因此,播放列表的解析和信息提示生成是有限的,所以,信息提示可以正确地显示在Vista的XP:
{S2} {S3}
我还没有包括在XP中的一个大信息提示的截图在这里仅仅是因为信息提示可以利用整个屏幕,如果你足够大(我不知道多少超出屏幕边界延伸)。
如果您没有在您的系统上安装有亚洲或其他宽字符的语言文件,你可能会错过一些字符,如果播放列表最初是用宽字符保存(Vista的放大器; XP screnshots):
{四至} {五}"守则"
这段代码是建立在从一个优秀的文章代码的顶部。
该项目是建立与VC 2005 Express的平台SDK2003 R2的WTL的8.0可能没有任何变化2008年在VC基础。
一个主要的播放列表解析框架内PlaylistParser.cpp找到。播放列表格式是由选定的文件扩展名和相应的解析函数。PLAYLIST_TYPE C_PlaylistParser::getType(CString fpl)
{
fpl.MakeLower();
if (fpl.IsEmpty()) return NOTPLS;
if (fpl==_T("m3u")) return M3U;
if (fpl==_T("m3u8")) return M3U;
......
return NOTPLS;
}
int C_PlaylistParser::process(CString fpls)
{
playlistFile.Split(fpls);
playlistFile.ext_nodot.MakeLower();
try
{
playlistType=getType(playlistFile.ext_nodot);
switch (playlistType)
{
case M3U:
parseM3U();
break;
case PLS:
parsePLS();
break;
......
default:
break;
}
buildPlaylist();
}
catch (...) {return FALSE;}
return TRUE;
}
M3U和M3U8处理通过MultiByteToWideChar CP_UTF8标志的文本行。
注意,PLS规范规定的条目是区分大小写的。
buildPlaylist()转换矢量存储到信息提示以下布局的详细信息:{C}
如果播放列表处理完全失败,一个通用的信息提示(文件类型,大小)显示。
请注意,文件的大小与正常工作只与超过2GB的文件GetFileSize决定。虽然这不是一个很好的做法,这是不可能播放列表将超过2 GB的。
最后,我们绝不能忘记使用的try / catch块CBmpTip:GetBitmapInfo的方法,以防止任何可能的错误,从崩溃的浏览器(如USB驱动器,同时在使用中拉出)。在源码包中有一个小的测试项目(PLS.sln)测试解析器代码,因为调试Windows Explorer外壳内扩展的,非常不方便。
*. OGG,播放列表等一些媒体类型可能omiss轨道玩耍,如果保存应用程序不能确定。如果文件路径指向网络电台流,曲目名称显示URL和跟踪玩耍是不确定的。{中六}Vista和UAC
为了使这个shell扩展很好的发挥与UAC,一个DLL必须添加已知的DLL列表。
重用代码HKLM
{
NoRemove Software
{
NoRemove Microsoft
{
NoRemove Windows
{
NoRemove CurrentVersion
{
NoRemove 'Shell Extensions'
{
NoRemove Approved
{
val {A191B386-C1C7-4fb5-AD9D-6979C21CE44B} = s 'PlsTip Class'
...
为了延长解析等播放清单格式(像WPL等),你需要把里面CBmpTip您的信息提示发生器功能:GetBitmapInfo成员,添加一个新的文件扩展名PlaylistGlobals.h内C_PlaylistParser PLAYLIST_TYPE枚举: :的getType,并添加了一个新的分析功能开关(playlistType)块。
这也是必要BmpTip.rgs和BmpTip.idl文件内添加必要的注册表项。
为了使一个完全新的信息提示扩展,把内CBmpTip您的新的信息提示发生器功能:GetBitmapInfo成员,并改变内BmpTip.rgs和BmpTip.idl文件的CLSID。
尽可能实现有限纠错,但它并不像正常程序错误的证据,因为我不希望手工制作的播放列表解析(其中可能包含错误)。代码工作最好的应用程序生成的播放列表,因为它们可能包含结构错误。该项目包一些测试文件,这样你就可以进行你自己的测试。| T800G