我目前正在使用:
if ParamStr(1)<>'%1' then begin address.Text:=ParamStr(1); autoconfigfile; end;
获取用于通过文件关联打开文件的文件的名称.
我现在想要开发对多个文件进行操作的能力.即如果我选择5个文件并右键单击并选择打开"EncryptionSystem".我有注册表项:
reg.OpenKey('*\shell\Encrypt\command', true); reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"'); reg.CloseKey;
为所有文件添加右键单击打开功能.然后我想要检测的能力
多少个文件
每个文件的路径名
gabr.. 6
除了其他一切,你应该使用%l而不是%1.这样你的程序将获得文件的完整(长)名称,而不是短(DOS 8.3).
编辑:评论中回答Rob的问题
似乎使用谷歌或MSDN搜索搜索'%l'和'%1'(包括百分号)几乎是不可能的.:(但是,我在旧的新东西中发现了一个非常好的描述 - '%1'自动检测你的程序是否支持长文件名并传递短名或长名.似乎所有现代系统都传递长名称,除非你的exe不能发现(至少我是如何理解雷蒙德的曝光).
如果在评论中滚动进一步下跌(搜索页上的"%L"),你会发现所有支持的参数,一些网页采取了已经不存在的名单(但我发现了一个旧的副本在互联网档案).该网页不包括没有提到微软的文档要么,所以我不能给你一个权威的链接:(
罗布,感谢对要求 - 我现在知道的比:) +1对于之前详细了解%1 /%L.
除了其他一切,你应该使用%l而不是%1.这样你的程序将获得文件的完整(长)名称,而不是短(DOS 8.3).
编辑:评论中回答Rob的问题
似乎使用谷歌或MSDN搜索搜索'%l'和'%1'(包括百分号)几乎是不可能的.:(但是,我在旧的新东西中发现了一个非常好的描述 - '%1'自动检测你的程序是否支持长文件名并传递短名或长名.似乎所有现代系统都传递长名称,除非你的exe不能发现(至少我是如何理解雷蒙德的曝光).
如果在评论中滚动进一步下跌(搜索页上的"%L"),你会发现所有支持的参数,一些网页采取了已经不存在的名单(但我发现了一个旧的副本在互联网档案).该网页不包括没有提到微软的文档要么,所以我不能给你一个权威的链接:(
罗布,感谢对要求 - 我现在知道的比:) +1对于之前详细了解%1 /%L.
如果您尝试一次打开多个文件,通常会获得已注册程序的多个实例,每个实例打开一个文件.
现在从你最近的问题来判断
如何判断我的程序的一个实例是否正在运行?
如何从一个Delphi程序实例发送字符串到另一个实例?
您不希望允许该程序的多个实例,因此您需要重新考虑该设计决策,或者实现第二个问题的答案中概述的方法之一,以发送程序的辅助实例的命令行参数到第一个例子.请注意,此处的时序非常重要,因为第一个实例可能尚未准备好从其他实例接收数据.特别是对于使用主窗体的窗口句柄的解决方案,或某种形式的基于管道或文件的通信机制将涉及等待第一个实例准备好.因此,简单地允许程序的多个实例可能更容易.
您可能还需要查看此Microsoft知识库条目或搜索有关DDE执行命令的更多信息.
编辑:您也可以在注册表项中尝试使用"%*"而不是"%1",详见"旧新事物"评论gabr提到的答案.我没有测试过这个,但看起来它可以工作.