从“发送到”菜单调用程序时,如何确定用户正在浏览的文件夹?

时间:2012-06-10 14:36:50

标签: windows delphi windows-explorer

我在SendTo中为我的应用程序添加了一个快捷方式。现在我可以在Explorer中选择一些文件并将它们发送到我的应用程序。但是我怎样才能获得文件所在的路径?我的程序应该在父目录中创建一个新文件,该文件对于所有收到的文件名是通用的。

例如,如果我有这些文件:

C:\one.txt
C:\1\

我在资源管理器中选择文件 one.txt 和目录 1 。如何找出这些文件的起始目录是 C:\

我知道我可以使用ParamStr()来获取文件的路径,但那么呢? 我可以尝试为传递给我的应用程序的所有文件获取公共目录,但是如果我选择 C:\ 目录 1 2 并且这些目录看起来像这样:

C:\1\4\5\one.txt
C:\1\4\two.txt

然后起始目录是 C:\ 1 \ 4

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

我想我会通过ParamStr获取传递给我程序的所有文件名并使用此函数: http://delphi.about.com/od/delphichallengesexercises/qt/delphi-extract-base-path-challenge.htm 找到共同的基本路径,它应该是调用SendTo的路径。