SelectDirectory在某些计算机上不包括驱动器

用户名

以下代码在不同的计算机上得到不同的结果。一台计算机仅提供桌面文件夹(不需要),另一台计算机提供桌面文件夹和计算机,映射的驱动器(所需)。

procedure TForm1.Button1Click(Sender: TObject);
var
  Directory : String;
begin
  FileCtrl.SelectDirectory('Caption', 'Desktop', Directory, [sdNewUI, sdShowEdit]);
end;

一台机器可以提供:

不良浏览

另一方面,它给出:

良好的浏览

感觉就像是Windows设置,但是我不确定从哪里开始。使用Windows 10的Delphi XE。

任何想法表示赞赏。谢谢你的时间。

约翰

解决方法
TFileOpenDialog改用*。
FileOpenDialog1.Options:= [fdoPickFolders,fdoPathMustExist]

在此处输入图片说明

现在,您将看到一个对话框:

  • 一直有效。
  • 允许复制粘贴

*)不要与TOpenDialog混淆,后者不允许您仅选择文件夹。

Solution for Windows XP
Note that the new TFileOpenDialog only works for Vista and above.
Your program will not work on XP if you include this control.
If you start the dialog on XP it will generate an EPlatformVersionException.

You may want to use the following code instead if you want to be backward compatible:

uses JclSysInfo; //because you have XE use JCL.

...
var
  WinMajorVer: Integer;
  Directory: string;
  FileDialog: TFileOpenDialog;
begin
  WinMajorVer:= GetWindowsMajorVersionNumber;
  if WinMajorVer < 6 then begin //pre-vista
    //To show the root Desktop namespace, you should be setting the Root parameter to an empty string ('') instead of 'Desktop'
    FileCtrl.SelectDirectory('Caption', '', Directory, [sdNewUI, sdShowEdit]);
  end else begin
    FileDialog:= TFileOpenDialog.Create(self);
    try
      FileDialog.Options:= [fdoPickFolders,fdoPathMustExist];
      if FileDialog.Execute then Directory:= FileOpenDialog1.FileName;
    finally
      FileDialog.Free;
    end;
  end;
  Result:= Directory;
end;

Recommended reading:
detect windows version

EDIT

FileCtrl.SelectDirectory('Caption', 'Desktop', Directory, [sdNewUI, sdShowEdit]);

The 'Desktop' goes into the Root parameter, which is handled like so:

...
    SHGetDesktopFolder(IDesktopFolder);
    IDesktopFolder.ParseDisplayName(Application.Handle, nil,
      Root, Eaten, RootItemIDList, Flags);
...

Here's what MSDN for IDesktopFolder.ParseDisplayName has to say:

pszDisplayName [in]
Type: LPWSTR
A null-terminated Unicode string with the display name. Because each Shell folder defines its own parsing syntax, the form this string can take may vary. The desktop folder, for instance, accepts paths such as "C:\My Docs\My File.txt". It also will accept references to items in the namespace that have a GUID associated with them using the "::{GUID}" syntax.

Note that the documentation states that the desktop folder will accept paths and guids. It does not accept 'Desktop'. Because that's neither.

The fact that 'Desktop' as a root works on one system but not another is some undocumented fix made in an older/newer version of the IDesktopFolder interface.

技术解决方案
使用''的是在我上面的代码所示的“根”。

显然,这SelectDirectory是Microsoft的一个非常糟糕的设计,永远不应该使用。它只是在很多方面都糟透了。我建议尽可能不要使用它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Windows计算机上备份HFS +驱动器

来自分类Dev

在新计算机上安装旧计算机的硬盘驱动器?

来自分类Dev

从我的所有计算机上复制所有类型的文件,但不包括某些目录

来自分类Dev

如何访问自己网络上安装在计算机上的外部驱动器?

来自分类Dev

通过网络访问计算机上的驱动器时,为什么使用“ $”

来自分类Dev

如何使用外部DVD驱动器在Sunblade 150计算机上安装Solaris 10?

来自分类Dev

如何访问自己网络上安装在计算机上的外部驱动器?

来自分类Dev

如何在没有CD驱动器的计算机上安装Windows XP?

来自分类Dev

从远程网络计算机上的共享驱动器运行批处理

来自分类Dev

无法通过USB闪存驱动器在新计算机上安装Ubuntu 15.04

来自分类Dev

如何锁定计算机上的驱动器访问权限?

来自分类Dev

硬盘驱动器和分区未显示在此计算机上的“文件”下

来自分类Dev

Windows 10共享驱动器仅由某些计算机检测到

来自分类Dev

某些计算机无法从外部硬盘驱动器启动

来自分类Dev

当我在大学计算机实验室中启动时,外部驱动器无法在计算机上启动

来自分类Dev

查找哪些驱动器连接到计算机

来自分类Dev

远程计算机驱动器信息不准确

来自分类Dev

计算机无法从内部驱动器启动

来自分类Dev

如何在UEFI计算机上使用grub2从驱动器启动ISO文件?

来自分类Dev

如何直接从另一台计算机上的Crashplan备份目标硬盘驱动器还原?

来自分类Dev

如何在UEFI计算机上使用grub2从驱动器启动ISO文件?

来自分类Dev

尽管在磁盘管理中显示了外部硬盘驱动器,但无法在其计算机上看到它

来自分类Dev

脚本,这样您就不会忘记公用计算机上的USB驱动器

来自分类Dev

如何在UEFI计算机上的外部驱动器(GPT)上制作便携式Kubuntu?

来自分类Dev

旧硬盘驱动器上的Windows 8.1是否可以在新计算机上使用?

来自分类Dev

在个人笔记本电脑/计算机上使用外部硬盘驱动器

来自分类Dev

Windows 10累积更新失败(在具有SSD系统驱动器+ HDD的计算机上)

来自分类Dev

在两台计算机上将ONE硬盘驱动器与ONE OS一起使用

来自分类Dev

在另一台计算机上移动受HP DriveLock保护的硬盘驱动器

Related 相关文章

  1. 1

    在Windows计算机上备份HFS +驱动器

  2. 2

    在新计算机上安装旧计算机的硬盘驱动器?

  3. 3

    从我的所有计算机上复制所有类型的文件,但不包括某些目录

  4. 4

    如何访问自己网络上安装在计算机上的外部驱动器?

  5. 5

    通过网络访问计算机上的驱动器时,为什么使用“ $”

  6. 6

    如何使用外部DVD驱动器在Sunblade 150计算机上安装Solaris 10?

  7. 7

    如何访问自己网络上安装在计算机上的外部驱动器?

  8. 8

    如何在没有CD驱动器的计算机上安装Windows XP?

  9. 9

    从远程网络计算机上的共享驱动器运行批处理

  10. 10

    无法通过USB闪存驱动器在新计算机上安装Ubuntu 15.04

  11. 11

    如何锁定计算机上的驱动器访问权限?

  12. 12

    硬盘驱动器和分区未显示在此计算机上的“文件”下

  13. 13

    Windows 10共享驱动器仅由某些计算机检测到

  14. 14

    某些计算机无法从外部硬盘驱动器启动

  15. 15

    当我在大学计算机实验室中启动时,外部驱动器无法在计算机上启动

  16. 16

    查找哪些驱动器连接到计算机

  17. 17

    远程计算机驱动器信息不准确

  18. 18

    计算机无法从内部驱动器启动

  19. 19

    如何在UEFI计算机上使用grub2从驱动器启动ISO文件?

  20. 20

    如何直接从另一台计算机上的Crashplan备份目标硬盘驱动器还原?

  21. 21

    如何在UEFI计算机上使用grub2从驱动器启动ISO文件?

  22. 22

    尽管在磁盘管理中显示了外部硬盘驱动器,但无法在其计算机上看到它

  23. 23

    脚本,这样您就不会忘记公用计算机上的USB驱动器

  24. 24

    如何在UEFI计算机上的外部驱动器(GPT)上制作便携式Kubuntu?

  25. 25

    旧硬盘驱动器上的Windows 8.1是否可以在新计算机上使用?

  26. 26

    在个人笔记本电脑/计算机上使用外部硬盘驱动器

  27. 27

    Windows 10累积更新失败(在具有SSD系统驱动器+ HDD的计算机上)

  28. 28

    在两台计算机上将ONE硬盘驱动器与ONE OS一起使用

  29. 29

    在另一台计算机上移动受HP DriveLock保护的硬盘驱动器

热门标签

归档