我目前正在使用:

if ParamStr(1)<>'%1' then
begin
  address.Text:=ParamStr(1);
  autoconfigfile;
end;

拿起名字的文件,该文件是用来打开文件与通过文件的协会。

我现在想要发展运作的能力在多个文件。I.e。如果我选择5的文件和正确的点击和选择开放与"EncryptionSystem".我有注册条目:

  reg.OpenKey('*\shell\Encrypt\command', true);
  reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"');
  reg.CloseKey;

添加一个正确的打击能力的所有文件。然后我会希望能够检测

  1. 如许多文件
  2. 路径的每个文件
有帮助吗?

解决方案

如果您尝试一次打开多个文件,通常会获得已注册程序的多个实例,每个实例都会打开一个文件。

现在从你最近的问题判断

我该怎么说?我的程序的一个实例正在运行?
如何做我从一个Delphi程序实例发送一个字符串到另一个实例?

您不希望允许该程序的多个实例,因此您需要重新考虑该设计决策,或者实现第二个问题的答案中列出的方法之一,以发送辅助实例的命令行参数您的程序到第一个实例。请注意,此处的时序非常重要,因为第一个实例可能尚未准备好从其他实例接收数据。特别是对于使用主窗体的窗口句柄的解决方案,或某种形式的基于管道或文件的通信机制将涉及等待第一个实例准备好。因此,简单地允许程序的多个实例可能要容易得多。

您可能还需要查看此Microsoft知识库条目或搜索更多信息关于 DDE执行命令。

修改:您也可以尝试使用“%*”而不是“%1”在注册表项中,详见“Old New Thing”。评论答案gabr 提到。我没有对此进行测试,但看起来它可以正常工作。

其他提示

除了其他的一切,应使用%l而不%1.这样你的计划将得到一个完整的(长期)名称的文件,没有短(DOS8.3)中的一种。

编辑:一个答复抢劫的问题的意见

它似乎几乎是不可能搜索'%l'和'%1'(包括%的标志)或者使用谷歌或MSDN搜索。:(然而,我发现了一个很好的说明 老新的东西 -'%1'检测是否程序支持的长文件的名称和传递任或长或短的名称。似乎所有的现代系统通过长的名字 除非你exe找不到 (至少我是这么理解的雷蒙德的获得).

如果你滚动进一步下降的意见(搜索'%l'页)你会找到一个列表中的所有受支持的参数,采取的一些页面,不存在了(但是我发现了一个古老的副本 互联网上的档案).这一页不包括没有提到Microsoft文档,所以我不能给你权威的链接:(

抢劫,感谢的要求-我现在知道更多关于%1/%l比以前:)+1。

不确定你真正想要的是什么。但您可以通过以下方式找到参数数量:

ParamCount;

然后找到每个参数

ParamStr(1);
ParamStr(2);
ParamStr(3);

直到ParamCount。

我注意到你只是用%1注册它。

我会在注册表中尝试%1%2%3%4%5等。

我从来没有玩过shell扩展,看看还有什么可能让它失败。我所做的只是注册文件关联,它们的行为完全符合我的预期。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top