返回首页

{S0}简介
本文将介绍一种Windows外壳扩展,设计一个灵活和简便的方法来改变文件扩展名。使用此扩展,用户可以管理在一个单独的文件名和扩展。
默认情况下,资源管理器对用户隐藏的文件扩展名,这是确定",直到有而来的,是需要改变一个文件的扩展名。在Windows操作系统中,文件扩展名确定文件的类型和应用程序打开选定的文件,但有时我们发现一个不符合实际的文件内容与扩展的文件。最常见的例子之一是在类UNIX操作系统的文本文件。类UNIX系统通常使用换行符(0xAh),作为一个新的行分隔符,而不是Windows的回车换行字符对(0xDh 0xAh)。观看Windows的记事本,UNIX的*. txt文件通常显示为文本的BLOB没有适当的行结束符。对于庞大的文件,这使得文字难以阅读,并使得它几乎不可能正确的手工所有的行结束符。速战速决是在写字板中打开它,或重命名文件扩展名从*. txt的*. RTF。就个人而言,我用的是第二个选项。另一个例子是众所周知的漫画球迷:著名的*. CBZ只是压缩归档文件的扩展名改为*. ZIP为*. CBZ,图像文件。底线是,它是不是方便很多文件的扩展名手动更改。
这段代码的思想也从文件名起源是在Windows XP中处理。在Windows XP中,当一个文件被选中重命名,假设,是不是隐藏的扩展,选定两个文件名和扩展部分,用户必须强调只有扩展的一部分改变它。而且,它仅适用于一个单一的文件。在Vista中,当这两个部分是可见的,默认情况下名称的一部分突出。"守则"
{A}的文章,引发了这个代码的灵感之一,因此建议先读它,因为这篇文章是建立在它的上面。
此代码是编译时使用的Visual C 2005 Express版本,平台SDK 2003 R2 WTL的8.0和ResEdit的,所以任何人都应该能够建立项目。
由于这是一个外壳扩展,代码使用一个简单的异常处理,以防止任何意外的事件,Windows资源管理器崩溃。通过Win32 SHFileOperation函数进行重命名,文件操作一次,使Explorer可以提供一个quot; Undoquot;每一个处理文件的每一步。为了使在资源管理器"; Undoquot;行动,fFlags成员设置FOF_ALLOWUNDO。要正确格式SHFILEOPSTRUCT,一个额外的终止空'\ 0'必须被添加到文件名缓冲区的结束。

    SHFILEOPSTRUCT lpFileOp;

    memset(&lpFileOp,0,sizeof(lpFileOp));



    lpFileOp.hwnd=NULL;

    lpFileOp.fFlags=FOF_ALLOWUNDO;

    lpFileOp.wFunc=FO_RENAME;



    fname+='\0';//add buffer-terminating null to old name

    lpFileOp.pFrom=fname;



    toname=splitter.drive+splitter.dir+splitter.filename+_T(".")+newext;

    lpFileOp.pTo=toname;



    if (0!=SHFileOperation(&lpFileOp)) {/*MSGBOX0("SHFileOperation failed");

        */return false;}

使用SHFileOperation的后果,企图改变目标解决路径的延伸的一条捷径结果,和重命名操作目标。另一个奇怪的是,在这种情况下,对话是不尊重Explorer的所有者窗口模式。
默认情况下,右键单击第一个文件的文件扩展名是作为一个新的扩展选择。扩展显示在大写的外壳菜单项,但是,实际字符串的情况下为用户决定离开,因为有一些方案,用户可以选择保存文件时(如MP3和一个大写和小写的扩展之间MP3)。
新扩展检查无效字符,默认的Windows浏览器的行为是模拟:

如果您没有看到任何气球提示,下查找注册表项HKEY_CURRENT_USER \ SOFTWARE \ MICROSOFT \ WINDOWS \ \ Explorer中\高级设置DWORD值为EnableBalloonTips为1,使全系统的气球提示。
在外壳上下文菜单的菜单项的位置完全取决于*. rgs文件的字符串值的字母顺序。这个外壳扩展,项目的CLSID(A5096FA1 - 32DC - 4392 - A829 - 445558F0F4B5)用于定位的菜单项的外壳上下文菜单中的某个地方:
{S2}
如果在右边的字符串值,例如,AAAAAAAAAA_go_to_the_top__,菜单项将被定位在外壳上下文菜单的顶部:{C}
,您还需要相匹配的*. rgs文件的CLSID进入:
NoRemove CLSID

{

    ForceRemove { AAAAAAAAAA_go_to_the_top__} = s 'ChangeExtMenuExt Class'

    {

        InprocServer32 = s '%MODULE%'

        {

            val ThreadingModel = s 'Apartment'

        }

    }

}
GUI布局和XP风格的认识
菜单项有一个易于现场插入菜单点阵图,提供快速的视觉地标。
{S3}
这个外壳扩展的另一个重要问题,因为它是基于对话框,使视觉上的一致性的WinXP主题。为了有一个对话框,启用了XP主题,有必要在stdafx.h中#包括前设置以下值:
#define VC_EXTRALEAN //necessary

#ifndef _WIN32_WINNT

#define _WIN32_WINNT 0x501

#endif

#define _ATL_APARTMENT_THREADED



#define ISOLATION_AWARE_ENABLED 1 //XP style awareness

这些快照展示了在外观上的差异:主题知道:主题意识:{S4}的{五}
XP主题意识主题是进一步讨论在MSDN上的文章
提供了一些很好的和交互式的图形用户界面,而不是一个quot用户; Helpquot;按钮,我用
当心! ??如果你不把任何HTML帮助文件(*. CHM)在调试版本DLL的目录(其中hlppath变量指向),你会得到一个讨厌的资源管理器崩溃的CBitmapHyperlink的ASSERTS之一。在发行版中不会发生这种情况。
,而不是一个quot; Aboutquot;按钮,我决定把一个很好的可点击的图标。我把它作为一个读者的excercise实行业主绘制更看中按钮。推荐阅读
由恐龙埃斯波西托(MSDN,网址可能会改变)。这些错误和问题
请报告您在这篇文章的留言板中找到的任何问题和错误。| T800G

回答

评论会员:游客 时间:2011/12/16
我发现这今天和安装Win7的64位。它的工作,出色地改变一个mht文件的eml文件的大集团。他们工作完全测试。神奇的效用。感谢这么多
ifiult
评论会员:游客 时间:2011/12/16
喜T800G,THX很多...你的酷软件更改文件扩展壳牌菜单和显示节电是有用的,令人惊叹,令人难以置信的,太棒了,引起轰动,精彩{中六}!!我的评分是五颗星{七}!(我发送此消息在这里,因为我还没有找到您网站上的电子邮件。)THX再次!{{S8}
T800G
评论会员:游客 时间:2011/12/16
Windows7的64位也能用S9}修改2011年7月8日(星期五),下午07:50
sti3
评论会员:游客 时间:2011/12/16
我只是地方的DLL到C:\Windows\System32下,并重新启动
。T800G
评论会员:游客 时间:2011/12/16
第一,抓住一个新的美化版本(这是一个缓慢演变的项目):imgsrc=http://www.orcode.com/upimg/2011_12_16_16_10_15_5.png如果您运行的是Vista,您需要禁用UAC(我还没有发现需要做什么,使其运行与UAC)邮编/DLL解压缩到首选的位置/文件夹(例如C:/程序文件/ShellToys)。只需双击*.bat文件注册/注销。当你想将其删除,运行unregister.bat,关闭所有窗口并注销(您不必重新启动整个机器),以便Windows从内存中卸载DLL,然后你就可以重新登录和删除/替换文件。我还需要一个完整的帮助文件,但这里有一个快速启动:选择文件(S),并进入新的扩展,点击OK/输入撤消文件更改文件,如果您重命名很多文件-只需按CTRL-Z(Windows资源管理器中的"撤消"的全面整合)默认情况下,选定扩展的文件(你可以改变所有现有的-一个是右键单击)右键单击去掉扩展名,清除编辑框并点击进入-小心!如果您选择一条捷径,它的目标,但它不会更新快捷方式(它会破坏它)加上对话框不绑定Explorer的窗口(Windows的错误)所有的变化都cosmetical,有没有功能上的差异。1.2.0.8变更:-现在你可以拖动的窗口,它的整个表面(就像Windows媒体播放器)图形用户界面有一个Vista的外观引擎盖下:现在的超链接位图渲染透明度(AtlCopyBitmap剥离)-超链接文本是水平居中要做到:使它看起来更像Vista任务对话框-improve/replace位图的超链接类-编辑框中自动验证输入的字符-跳过文件夹壳对象希望,我会发现一段时间,本周末更新的文章,并添加一个外部链接。敬请关注,更多的好东西的方式imgsrc=http://www.orcode.com/upimg/2011_12_16_16_10_16_10.gif更新于9月12日,2008下午01:19
bambi94
评论会员:游客 时间:2011/12/16
您好,漂亮的扩展,非常感谢!BR}关于使用register.bat启用了UAC:以管理员身份运行时,register.bat,工作目录是"\WINDOWS\System32下",而不是"ReleaseMinDependency"包含批处理文件。。bat文件,如果我硬编码的完整路径ChangeExt.dll,然后我就可以右键点击"register.bat"以管理员身份运行,并成功注册的。dll。这是一个快速的黑客,肯定有一个更优雅的方法imgsrc=http://www.orcode.com/upimg/2011_12_16_16_10_16_10.gif顺便说一句:你是否有一个已编译的64位ChangeExt.dll至于,-JGD
T800G
评论会员:游客 时间:2011/12/16
这是很好看,其他人也发现此实用工具是有用的。imgsrc=http://www.orcode.com/upimg/2011_12_16_16_10_16_10.gif当我发现一段时间(和除霜自己,这是冬季恒定-5*在这里),我会做一个小的寄存器/启用管理器应用程序(和适当的帮助文件),因此它会更容易使用下的UAC。至于x64的编译,我没有试过,因为我运行VISTA/XP32位。我会需要一些时间来考虑。也许有人在论坛上可以帮助(可能有人已经有一些经验与x64版本)当我尝试编译/Wp64开关(64可移植性警告),我看到一些从WTL的警告,但因为我没有任何与x64的经验,现在我可以说的是,你可以自由研成64世界imgsrc=http://www.orcode.com/upimg/2011_12_16_16_10_16_13.gif
。bambi94
评论会员:游客 时间:2011/12/16
我没有编译Windows下的经验。不过,我会给它一个尝试,如果我找到了一些空闲时间...如果我找到所需的文件:到目前为止,我在Vistax64的工作站下载视觉XYZ的2008,但由于缺乏"atlbase.h"编译失败....我觉得像一个Unixian在Windows世界imgsrc=http://www.orcode.com/upimg/2011_12_16_16_10_16_14.gif失去的问候,-JGD
T800G
评论会员:游客 时间:2011/12/16
您需要ATL(和一些MFC)imgsrc=http://www.orcode.com/upimg/2011_12_16_16_10_16_6.gif(XP)的头文件和库。这是唯一的方式得到ATL(旧版本3,但工程WTL的就好了)不随地吐痰的VC临$$$$$,所以这一切,而你还是可以的。M$的可能有人意识到使用这些来源,除了从MFC,你可以用VC临,但0元的东西,所以他们取消从较新的软件开发工具包ATL和MFC。你可以尝试其他一些机器上安装,只需复制必要的文件夹,以避免所有这些安装弄乱的东西。您可以按照说明imgsrc=http://www.orcode.com/upimg/2011_12_16_16_10_16_7.gif如何设置这个组合。如果您正在使用VC2008表达你需要设置最多WTL的(在wtl.sourceforge.net)前,在记事本和更改的所有行从开放setup80x.js......\\VCExpress\\8.0\\设置.........\\VCExpress\\9.0\\设置...所以它可以"安装"到VCWTL向导正确。对于资源的编辑我使用imgsrc=http://www.orcode.com/upimg/2011_12_16_16_10_16_8.gif)我没有用VC2008建立因为一切对我的作品与VC2005(即使它有点laggyIDE)的罚款,所以我可以告诉googleing和阅读第一,所以你完全知情,如何使这一切工作,正确(但获得SDK和DDK现在,没有人知道多久,他们会用)。它可以采取一段时间来精心设置最多的一切,但它值得
。yarp
评论会员:游客 时间:2011/12/16
。我是好奇如何你处理无效字符和欺骗,你只验证中的OnOK了如果你感兴趣的实时验证BjarnViskoe这样的控制,这是我在相同的情况下使用:imgsrc=http://www.orcode.com/upimg/2011_12_16_16_10_16_9.gif顺便说一句,我给你5,我只是发布上述供参考和他人。Yarphttp://www.senosoft.com/
T800G
评论会员:游客 时间:2011/12/16
我拨弄有点Viksoe的代码示例(我没有时间去研究它,因为这只是我的爱好,),但我认为这是一个丑陋矫枉过正这样一个简单的任务,因为所有我需要的是一个baloontip。在旁边,我故意效仿Explorer的行为,与资源管理器的GUI。一致顺便说一句,感谢您的投票;这段代码是我的需要做出来的,但我想很多人将受益于使用它imgsrc=http://www.orcode.com/upimg/2011_12_16_16_10_16_10.gif修改日(星期四),5月8日,2008下午02:42