关于文件的双击打开,软件本来好像已经做过了,但是好像一直以来都没有起到很好的作用。文件关联一定是做了,因为双击能打开软件,而打开了软件并没有打开对应的文件。而且在软件安装后只能重启之后才能使关联的文件才能有对应的图标,当然这样看似破烂的工作又安排到了我的身上了。
经过一番研究什么时候不能打开文件呢?一般是有空格的的情况,最后发现时一个dll出的问题,所以把dll中的程序调整了以后就没什么问题了。当然我自己调试的时候是通过修改文件的默认打开项来实现文件关联的,因为用的不是安装文件,只是自己的调试程序。本来觉得已经完事了,没想到等同事把安装文件做好后还是有问题,问题同样的出现。所以自己不得不自己也安装了一份程序来试验,把自己的调试exe覆盖掉软件中的exe来通过showmessage不断调试show出来自己想要的结果。同事一直认为我的ParamStr(1)得到的路径是错误的。
我明明觉得好好的为什么是错误的呢?经过调试得出来的路径果然是出乎意料的,因为桌面上得到的文件的路径类似于“C:\Docume~1\Admini~1\...”这样的路径,由于自己对文件系统的一些了解很明显的知道这得到的是文件的短文件形式,当然这样也可以直接打开文件,但是软件中有一些分析路径的过程是按照预想长文件名格式来的,所以会失败。然而如果是在文件路径中没有空格的路径中得到的就是长文件名的形式的,并能正确打开。
这样倒是也有办法就是通过GetLongPathName把短文件名转换成长文件名,但是觉得这样很蹩脚。难道真的是必须这样吗?那操作系统也太有问题了吧!所以不如自己试验了一下文件关联,在网上找了段代码,自己修改了一下:
// 注册文件关联
// ExeName: 要检测的扩展名(例如: .txt)
// AppName: 要关联的应用程序名(例如: C:\StarTask\StarTask.exe)
// AppKey: ExeName扩展名在注册表中的键值(例如: txtfile)
// Icon: 扩展名为ExeName的图标文件(例如: C:\StarTask\Task.ico)
// Describe: 文件类型描述
RegisterFileRelation(ExtName, AppName,AppKey,Icon, Describe:string):boolean;
var
Reg : TRegistry;
begin
try
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey(ExtName,true);
Reg.WriteString('',AppKey);
Reg.CloseKey;
Reg.OpenKey(AppKey,true);
Reg.WriteString('',Describe);
Reg.CloseKey;
Reg.OpenKey(AppKey + '\DefaultIcon',true);
Reg.WriteString('',Icon );
Reg.CloseKey;
Reg.OpenKey(AppKey + '\Shell',true);
Reg.WriteString('','Open' );
Reg.CloseKey;
Reg.OpenKey(AppKey + '\Shell\Open\Command',true);
Reg.WriteString('',AppName + ' "%1"');
Reg.CloseKey;
reg.free;
Result := True;
except
Reg.Free;
Result := false;
end;
end;
通过自己调试通过了,在路径中有空格的情况下得到的文件路径也是长文件名形式的,所以我觉得还是应该是同事在文件关联的地方出了问题,最后硬要来代码仔细观察了以后发现‘ %1’的问题, 在delphi中 ‘ %1’ 写成 ' "%1"'这种形式的话在得到文件的路径的时候才不会因为空格什么出问题。
上面的那段代码,是在http://hi.baidu.com/piaoliuxia/blog/item/924bae22cafd55fbd6cae271.html这篇博客中得到的,修改了一点内容。同时也在这篇博客里找到了SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); (uses ShlObj)这样一个方法可以轻松的实现在文件关联后立刻更新文件图标等内容。
分享到:
相关推荐
在本主题“c#测试双击打开自定义程序”中,我们将探讨如何在C#中实现一个功能,即当用户双击特定类型的文件时,能够自动启动我们自定义的程序来处理这个文件。这一功能通常涉及到文件关联,这是操作系统提供的一种...
- 如果以上步骤完成后仍然无法通过双击打开`.jar`文件,那么可能是因为`.jar`文件与Java执行程序之间的关联存在问题。 - 可以尝试手动创建一个快捷方式指向Java执行程序,并设置参数以打开特定的`.jar`文件。 - ...
这里通常有两项选择:“通过双击打开项目”和“通过单击打开项目”。 4. 如果当前设置为“通过单击打开项目”,那么问题就出在这里。为了将左键单击恢复为仅选择文件夹,而不是打开文件夹,你需要取消当前选择,并...
这样的应用程序通常会有一个托盘图标,用户可以通过右击该图标来访问菜单,或者双击图标来打开或执行软件的主要功能。下面将详细介绍如何实现这个功能。 首先,我们需要在WPF项目中添加必要的元素和组件。在XAML...
资源包,分享的所有都在这里下载(双击打开)资源包,分享的所有都在这里下载(双击打开)资源包,分享的所有都在这里下载(双击打开)资源包,分享的所有都在这里下载(双击打开)资源包,分享的所有都在这里下载...
当你在尝试双击打开PB项目时遇到错误,这可能是由于多种原因引起的,包括注册表问题、软件版本不兼容、环境变量设置不当或者安装损坏等。下面将详细介绍如何修复PB双击打开错误的问题。 首先,我们要关注的是注册表...
标题和描述中提到的解决方案是通过编写一个自定义程序来关联.DSW文件,从而实现双击打开多个工程的功能。 首先,我们需要理解.DSW文件的性质。DSW文件是VC6中的工作区文件,它包含了项目集的信息,包括各个子项目...
6. **应对策略**:如果不幸中招,可以尝试用系统还原或安全模式启动电脑,删除有问题的文件,并使用杀毒软件进行全盘扫描。同时,及时向朋友发出警告,防止他们也遭受同样的恶作剧。 总的来说,"双击打开恶搞软件...
当你遇到"双击.xpr打开错误.docx"的问题,这意味着你的系统无法正确识别或启动Vivado来处理这个文件,导致出现“Cannot locate target loader”的错误信息。这个问题可能是由多种原因引起的,下面我们将深入探讨可能...
0:谷歌浏览器安装包 双击打开.exe
标题中的“vc双击打开工具”是指一个专为Visual C++(VC)用户设计的应用程序,它解决了在开发过程中一次性打开多个.dsw工程文件时,原有的工程被覆盖的问题。这个工具使得开发者能够方便地并行处理多个项目,提高...
1.某台电脑上的 Word 文档有三种打开方式:桌面双击文档的图标打开、鼠标右键菜单选择打开方式 Microsoft Office Word 打开、 Word 菜单命令打开。还有三种保存方式:点击"保存、 ctrl + s 保存,菜单命令保存。请为...
金蝶Cloud简单账表双击打开对应单据,代码简单,可以实现单据页签打开和窗口打开等方式
然而,在使用过程中,有时会遇到双击 DSN 或 BRD 文件无法打开的问题。本文将详细介绍如何通过修改注册表来解决这一问题。 #### 一、问题概述 DSN 和 BRD 分别是 Cadence Allegro 设计系统的两种常见文件格式:DSN...
双击主窗口弹出“打开文件对话框” 双击主窗口弹出“打开文件对话框” 双击主窗口弹出“打开文件对话框”
一旦恢复文件关联,Excel 文件就可以直接双击打开了。 文件关联的重要性 ------------------- 文件关联是操作系统对文件类型的识别和对应的应用程序的关联关系。它 plays a crucial role 在文件打开过程中。文件...
在日常工作中,我们经常会遇到一些让人头疼的问题,比如文档双击后虽然能够成功打开,但却无法正常显示内容的情况。这种情况通常会让用户感到困惑且影响工作效率。本文将详细介绍几种有效的解决方法,并通过实际测试...
标题“搜索文件名双击打开”所描述的功能是,在一个特定的文件夹内搜索特定的文件名,并且允许用户双击找到的文件以快速启动编辑。这个功能在日常工作中非常实用,尤其对于需要频繁查找和编辑文件的用户来说,可以...
Word 和 Doc 文档双击打不开的解决方案 在这篇文章中,我们将探讨 Word 和 Doc 文档双击打不开的问题,并提供...通过遵循这些步骤,用户可以轻松地解决 Word 和 Doc 文档双击打不开的问题,并恢复文件的正常打开功能。
修复遇到双击打开Brd文件时出现新页面而不是打开指定文件的问题;步骤如下:1、下载reg文件后将后缀名字改为txt文件;2、进去修改本机安装cadence的具体路劲;3、只修改里面的路径对应的文件夹名为你程序所对应的...