创建文件关联时,您指定了 Explorer 应该运行的命令行来激活您的程序。shell 也将文档文件的名称放在命令行上,因此在您的程序中,检查命令行参数。你如何做到这一点取决于你的语言和开发环境。在 Delphi 中,使用ParamCount
和ParamStr
函数。
创建文件关联时,您可以在命令行上准确指定文档文件名的位置。在命令行的某处使用%1
,shell 将用文件名替换它。由于 Windows 文件名经常包含空格,因此您应该在文件名周围加上引号,因此文件关联中的命令行如下所示:
ArthurApp.exe "%1"
通过该关联,双击另一个文档文件将启动程序的另一个实例。如果您希望在已运行实例的另一个窗口中打开文档,则可以编写代码使程序在启动时查找已运行实例。如果它找到一个,那么它可以与那个实例通信,告诉它要打开什么文件。您可以通过多种方式实现这种通信,包括邮槽、套接字、命名管道、内存映射文件和 DDE。
shell 的文件关联机制已经有一种通过 DDE 进行通信的方式,因此您的程序的第二个实例根本不会启动。相反,shell 将与已经运行的实例开始一个 DDE 对话,并以这种方式告诉它新的文件名。但是,现在 DDE 似乎已失宠,因此请先查看其他一些选项。
对于您的附带问题,不,扩展名并不总是三个字符长。环顾四周,这应该很明显:C 代码放在.c文件中,Adobe Illustrator 图形放在.ai文件中,新的 Microsoft Word 文档放在.docx文件中。
但要小心。如果您要求 **.doc*,结果也将包括.docx文件。这是因为FindFirstFile
同时匹配短文件名和长文件名,并且具有长文件扩展名的长文件名在其短文件名版本中具有三个字符的扩展名。