示例:如果我创建一个新的扩展“.xyz”说,我告诉Windows我想用myapplication打开文件类型.xyz,然后它开始我的应用程序.太棒了,但我的应用程序如何处理用于启动它的文件的文件路径?
此外,有没有办法只保留我的应用程序的一个版本运行和打开的新文件只是调用我的应用程序中的方法?例如,如果您使用torrent并打开5个.torrent文件,那么它们只会传递给一个应用程序.
附带问题:所有文件扩展名都是3个字母长,是否有公开使用的列表?如果我正在创建文件扩展名,我不想使用已经使用过的文件扩展名.
解决方法
ParamCount
和
ParamStr
函数.
创建文件关联时,可以准确指定文档文件名称应在命令行上的位置.在命令行的某处使用%1,shell将用文件名替换它.由于Windows文件名经常包含空格,因此应在文件名周围加上引号,因此文件关联中的命令行如下所示:
ArthurApp.exe "%1" @H_301_15@使用该关联,双击另一个文档文件将启动程序的另一个实例.如果您希望在已经运行的实例的另一个窗口中打开文档,那么您可以编写代码以使程序在启动时查找已经运行的实例.如果找到一个,那么它可以与该实例通信以告诉它要打开哪个文件.您可以通过多种方式实现该通信,包括邮件槽,套接字,命名管道,内存映射文件和DDE.
shell的文件关联机制已经有了通过DDE进行通信的方式,因此根本不会启动程序的第二个实例.相反,shell将启动与已经运行的实例的DDE对话,并以这种方式告诉它新的文件名.然而,DDE似乎现在已经失宠了,所以首先查看一些其他选项.
对于你的问题,不,扩展名并不总是三个字符.环顾四周,这应该是显而易见的:C代码进入.c文件,Adobe Illustrator图形进入.ai文件,新的Microsoft Word文档进入.docx文件.
但要注意.如果你要求**.doc *,结果将包括.docx文件.这是因为FindFirstFile匹配短文件名和长文件名,而具有长文件扩展名的长文件名在其短文件名版本中具有三个字符的扩展名.