Windows 当我的程序从";调用时,如何确定用户正在浏览哪个文件夹;发送至;菜单?

Windows 当我的程序从";调用时,如何确定用户正在浏览哪个文件夹;发送至;菜单?,windows,delphi,windows-explorer,Windows,Delphi,Windows Explorer,我在SendTo中设置了应用程序的快捷方式。现在我可以在资源管理器中选择一些文件并将它们发送到我的应用程序。但是我怎样才能得到文件所在的路径呢?我的程序应该在父目录中创建一个新文件,该文件对所有接收到的文件名都是公用的 例如,如果我有以下文件: C:\one.txt C:\1\ 然后开始目录是C:\1\4。我想我只需要通过ParamStr获取传递给我的程序的所有文件名,并使用此函数: 要查找公共基本路径,该路径应为调用SendTo的路径。在Windows 7之前,在资源管理器中选择的所有文件始终

我在SendTo中设置了应用程序的快捷方式。现在我可以在资源管理器中选择一些文件并将它们发送到我的应用程序。但是我怎样才能得到文件所在的路径呢?我的程序应该在父目录中创建一个新文件,该文件对所有接收到的文件名都是公用的

例如,如果我有以下文件:

C:\one.txt C:\1\
然后开始目录是C:\1\4。

我想我只需要通过ParamStr获取传递给我的程序的所有文件名,并使用此函数:
要查找公共基本路径,该路径应为调用SendTo的路径。

在Windows 7之前,在资源管理器中选择的所有文件始终位于同一目录中,因此很容易知道用户正在浏览的目录。它与任何一个文件的目录相同。用这个

不过,从Windows7开始,资源管理器允许您。所有文件夹中的所有文件都显示在一个视图中。用户可以从多个目录中选择文件,并立即将它们全部发送到您的程序。视图并不表示磁盘上的任何真实目录,因此这里提出的问题毫无意义

作为替代方案,您可以决定是否使用发送到您的程序,但这不会告诉您多少。首先,如果文件驻留在多个驱动器上,那么公共目录将是空字符串。您计算的目录也可能无法由当前帐户写入,即使一个或多个选定文件的目录为空


只使用接收到的第一个文件的目录可能会更容易,甚至可以显示一个UI,在无法自动确定目录的情况下询问用户使用哪个目录。(也许您可以使用第一个目录预先填充结果,这样用户就不必做任何事情,只需在常见情况下批准您的建议。)

那么您是在问如何提取文件名部分的驱动器号?为什么不直接使用?应用程序的起始路径是快捷方式的“起始位置”目录。这是你问的吗?在什么情况下,拥有多个文件是重要的?@Chris:不,我的起始路径可以是C:\1,而不是C:\我想知道选择发送到我的程序的文件的基本目录。@SertacAkyuz:这不是快捷方式的“开始位置”字段。这是调用SendTo命令的目录。@Tom-您的“起始位置”字段为空或无效,或者我们讨论的不是同一件事。我担心您似乎认为公共父目录在这种上下文中有任何意义。没有。公共父目录甚至可能是一个空字符串,因此我不确定您通常打算对其执行什么操作。我想对所选文件执行一些操作,并在用户选择这些文件的目录中创建一个新文件。所以它对我有意义。我不知道这怎么可能是空字符串。你不知道它怎么可能是空字符串?你认为C:\foo.txt和D:\bar.txt的公共文件夹是什么?当我说公共祖先文件夹没有意义时,我指的是当前Windows资源管理器视图或程序的当前目录。欢迎您指定任何您想要的含义,但这并不保证它有意义。@RobKennedy:我不需要当前的Windows资源管理器文件夹或我的程序文件夹,只需要用户调用SendTo事件的文件夹。看来公共祖先文件夹可以做到这一点。我认为不可能选择C:\foo.txt和D:\bar.txt并一次性将它们发送到SendTo快捷方式。你可以做两个动作,但我会让我的应用程序启动两次,每个实例都可以计算非空的祖先文件夹。谢谢,我不知道Windows 7上的这些“库”。在Win7之前的版本中,祖先目录应该做我想做的事情,我看不出它怎么可能是空的。对于Win7,我将在稍后处理,也许我会像您建议的那样询问用户希望使用的目录。实际上,IDataObject(发送到“文件列表”)可以包含所有版本的Windows(包括Win95)上不同目录的文件。怎么用?从一个地方;文件搜索! C:\1\4\5\one.txt C:\1\4\two.txt