使用 Delphi 查找特殊驱动器

2024-01-07

我正在尝试在 Delphi 2007 中编写一个小程序,以便在便携式 USB 驱动器插入 Windows 7 计算机时访问该驱动器上的文件。但该驱动器并不显示为标准驱动器号。它出现在 Windows 资源管理器中的便携式设备下。我编写了以下代码来枚举“计算机”下的所有项目:

Procedure TfrmMain.ComputerChanged(Var Msg: TMessage);
Var
  Enum: IEnumIDList;
  Fetched: Longword;
  Item: PItemIDList;
  Path: String;
  Computer: IShellFolder;
  StrRet: TSTRRET;
Begin
  Status('Computer changed...  Checking folders.');
  fDesktop.BindToObject(fCompPidl, Nil, IID_IShellFolder, Computer);
  If Assigned(Computer) And
     (Computer.EnumObjects(Self.Handle, SHCONTF_FOLDERS, Enum) = NOERROR) Then
  Begin
    While (Enum.Next(1, Item, Fetched) = NOERROR) Do
    Begin
      FillChar(StrRet, SizeOf(StrRet), #0);
      Computer.GetDisplayNameOf(Item, SHGDN_FORADDRESSBAR or SHGDN_NORMAL, StrRet);
      Path := StrRetToStr(StrRet, Item);
      Status(Path);
    End;
  End;
End;

(注意:Status 过程仅向 TMemo 输出一条消息。)

每当我的应用程序收到 Windows shell 子系统的更改通知时,就会调用此函数。它枚举了所有本地驱动器和网络驱动器,但没有枚举其他驱动器(iCloud 照片驱动器也丢失了)。

有谁知道如何访问这些虚拟驱动器上的文件?


您很可能没有正确初始化 COM。如果您不调用,您的代码将按原样运行协初始化Ex http://msdn.microsoft.com/en-us/library/windows/desktop/ms695279%28v=vs.85%29.aspx或者如果您使用错误的值调用它,但便携式设备驱动程序需要单元线程才能工作。

根据您的代码,这是一个可以正常运行并显示便携式设备的示例应用程序。如果你注释掉CoInitializeEx/CoUninitialize调用或传入COINIT_MULTITHREADED相反,它仍然可以工作,但它只显示驱动器。

program ListMyComputer;

{$APPTYPE CONSOLE}

uses
  ComObj, ShlObj, ShellApi, ShLwApi, ActiveX, Windows, SysUtils;

var
  Enum: IEnumIDList;
  Fetched: Longword;
  CompPidl, Item: PItemIDList;
  Path: PWideChar;
  Desktop, Computer: IShellFolder;
  StrRet: TSTRRET;
begin
  CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
  try
    WriteLn('Computer changed...  Checking folders.');
    SHGetDesktopFolder(Desktop);
    SHGetFolderLocation(0, CSIDL_DRIVES, 0, 0, CompPidl);
    Desktop.BindToObject(CompPidl, Nil, IID_IShellFolder, Computer);
    CoTaskMemFree(CompPidl);
    If Assigned(Computer) And
       (Computer.EnumObjects(0, SHCONTF_FOLDERS, Enum) = NOERROR) Then
    Begin
      While (Enum.Next(1, Item, Fetched) = NOERROR) Do
      Begin
        FillChar(StrRet, SizeOf(StrRet), #0);
        Computer.GetDisplayNameOf(Item, SHGDN_FORADDRESSBAR or SHGDN_NORMAL, StrRet);
        StrRetToStr(@StrRet, Item, Path);
        WriteLn(Path);
        CoTaskMemFree(Path);
      End;
    End;
    WriteLn('Enumeration complete');
    ReadLn;
  finally
    CoUninitialize
  end;
end.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Delphi 查找特殊驱动器 的相关文章

  • VirtualStringTree 正确/推荐使用

    我已经使用 virtualstringtree 一段时间了 我将它用于两个不同的用途 第一个是用于选择 显示数据的普通树 第二个是作为网格来显示 SQL 语句的输出 我加载到树中的所有数据都来自数据库 对于树示例 我有一个 ParentId
  • 为什么非交互式批处理脚本认为我按下了 Control-C?

    因此 当输出日志中突然出现以下内容时 我的批处理脚本运行得很好 21 27 13 99 c apps w7lab scripting gt some command Error 3221225786 CTerminate batch job
  • 使用 Windows 锁定屏幕后删除 Kerberos 缓存票证

    无论如何 有没有办法阻止 Kerberos 缓存的票证在 Windows 进入锁定屏幕后被删除 首次登录 Windows 时 klist exe 显示 2 个缓存票证 但是 发生 Windows 锁屏事件后 klist exe 显示 0 个
  • 如何从窗体单元外部访问delphi控件?

    我试图从如下定义的过程中调用计时器的 Enabled 属性 procedure Slide Form TForm Show Boolean 并且没有固定的形式名称 例如 Form2 Timer 将表单的单位放入使用列表后 这可以工作 For
  • 如何使用 Anaconda Python 执行 .py 文件?

    我刚刚在我的 Windows 计算机上下载并安装了 Anaconda 但是 我在使用命令提示符执行 py 文件时遇到问题 如何让我的计算机了解 python exe 应用程序位于 Anaconda 文件夹中 以便它可以执行我的 py 文件
  • 如何获取subprocess.run启动的进程的pid并杀死它

    我使用的是 Windows 10 和 Python 3 7 我运行了以下命令 import subprocess exeFilePath C Users test test exe subprocess run exeFilePath 使用
  • Python将文件从Linux复制到WIndows

    我正在构建一个网站 该网站有一个表单 可以捕获用户数据并在用户数据上运行一些cgi cgi 的第一步是需要将文件从 Linux Web 服务器复制到 Windows 计算机 服务器将使用 Active Directory 角色帐户作为复制凭
  • 如何计算 WPF 中的非客户端窗口大小?

    WPF 有SystemParameters class http msdn microsoft com en us library system windows systemparameters aspx公开了大量的系统指标 在我的计算机上
  • 最低 DirectX 9.0c 版本以及如何检查它

    我们基于 Windows C Ogre 的游戏即将完成 在我们公开发布之前 我们必须解决这个问题 如果未更新到最新的 Dx9 0c 版本 Ogre 在许多测试计算机上都会崩溃 所有这些计算机都已经安装了 9 0c 但这一定是旧操作系统预安装
  • 如何在 Windows 上检查子进程是否被信号杀死

    问题 给定一个在 python 中启动的子进程 其代码类似于 import subprocess p subprocess Popen command stdout subprocess PIPE stderr subprocess PIP
  • 消失的系统托盘图标

    我正在使用 C 在 Visual Studio 2010 中创建系统托盘应用程序 当应用程序启动时 我创建线程和系统托盘图标 该图标显示 但是每当我将鼠标悬停在该图标上时 它就会消失 应用程序仍在运行 即使我单击按钮显示所有隐藏的图标 它也
  • 如何在 RTMP 流中嵌入 pic_timing SEI 挂钟时间码?

    我需要将我的桌面流式传输到 AWS MediaLive 服务 并且根据要求 我必须在流中包含挂钟时间码 AWS 支持人员善意地通知我 对于 h 264 编码流 我需要提供时间码作为 pic timing SEI 消息 我在 Windows
  • Windows 相当于 Unix find 命令,用于搜索多种文件类型

    虽然在 Windows 中安装了 cygwin 可以提供大部分 unix 命令 但我仍然想知道如何使用 Windows find 命令在一个命令中搜索多个文件类型 ie find name cpp o name h o name java
  • 使用“for”循环迭代目录中的所有文件

    如何使用 a 迭代目录中的每个文件for loop 我如何判断某个条目是目录还是文件 这会递归地列出当前目录及其子目录中的所有文件 并且仅列出文件 for r i in do echo i 此外 如果您在批处理文件中运行该命令 则需要将 符
  • 在 Windows 上使用 pycrypto 时如何修复“ImportError:无法从 Crypto.Cipher 导入名称 _AES”?

    我在 Crypto 的 Cipher 模块中有 AES Python27 Lib Crypto Cipher AES 当我尝试做的时候 from Crypto Cipher import AES 我收到以下错误 Traceback most
  • 如何将 Delphi Chromium Embedded (TChromium) 组件的声音静音?

    我需要将某个声音静音TChromium组件来制作无声浏览器 主要问题是在 Windows XP 上 当我将浏览器的声音静音时 它会静音整个系统的声音 有没有办法让电脑静音TChromium成分 我已经成功使用以下代码 procedure C
  • 指针^ 与 s[1]

    在读取数据的函数中 数据含义只字符串 从磁盘 我应该更喜欢哪个 哪个更好 A DiskStream Read Pointer s Count or B DiskStream Read s 1 Count Note 我知道两者都有相同的结果
  • C++/Windows:如何报告内存不足异常(bad_alloc)?

    我目前正在为 Windows MSVC 9 0 应用程序开发基于异常的错误报告系统 即异常结构和类型 继承 调用堆栈 错误报告和日志记录等 我现在的问题是 如何正确报告和记录内存不足错误 当发生此错误时 例如作为bad alloc抛出的ne
  • GetEventLogs() 返回没有设置事件日志?

    采取以下 C 代码 EventLog eventLogs eventLogs EventLog GetEventLogs computername foreach EventLog evt in eventLogs statusMessag
  • Perl:管理 Windows 上的路径编码

    我正在努力处理包含非英文字符的路径 Activestate Perl Windows XP 如何打开 写入 复制等位于包含希腊语 俄语 法语重音字符的路径中的文件 假设我要将 text txt 文件复制到的目录是 C Documents a

随机推荐

  • 延迟加载 GTM 是个好主意吗

    为了缩短我正在开发的 Web 应用程序的初始加载时间 我想在加载应用程序后运行 GTM 脚本 我想知道这是否是一个好主意 如果我这样做 可能会产生什么副作用 TL dr 看来懒加载GTM也可以 长版 一般来说 我会按照创建者建议的方式运行脚
  • ZF2路由配置

    我刚刚构建了一个 zf2 项目 但遇到了配置问题 当我访问 mydomain com 时 此路由按照配置文件中指定的方式发送到应用程序模块 索引控制器 索引操作 但是如果我输入 mydomain com otheraction 这不会路由到
  • Django {{ MEDIA_URL }} 空白 @DEPRECATED

    在过去的几个小时里 我一直在为这个问题绞尽脑汁 我无法显示 MEDIA URL 在设置 py MEDIA URL http 10 10 0 106 ame TEMPLATE CONTEXT PROCESSORS django contrib
  • 如何使用 Material Design Lite 设置选择框格式?

    我已经通读了组件列表并通读了提供的 CSS 但我没有看到任何提及选择框的内容 只是常规输入 文本 单选 复选框 文本区域等 如何将 Material Design Lite 与选择框结合使用 使用这些类进行常规文本输入可以让您成功一半 但这
  • 如何创建指向网页某个子部分的深层链接?

    有谁知道如何创建指向单个网页的一小部分的深层链接 维基百科似乎已经破解了它 但我似乎无法在网络上的任何地方找到答案 PS 保持简单 仅当目标包含构成可在片段标识符中使用的 目标锚 的标记时 才可以链接到页面上的特定位置或元素 以 在链接中
  • java.awt.AWTError:无法使用 ':0' 作为 DISPLAY 变量的值连接到 X11 窗口服务器

    我一直在尝试运行一个Docker 内 Ubuntu VM 上基于 Java AWT 的应用程序 该应用程序非常简单 并且可以通过 Eclipse 在 Windows 上完美运行 它只是打开一个窗口并打印 hello world 事实上 当我
  • 突出显示 pandas 图中的最后一个数据点

    我有很多与此类似的图表 import pandas as pd dates pd date range 2012 01 01 2013 02 22 y np random randn len dates 365 Y pd Series y
  • 为什么当路径满足时 NWPathMonitor 不给出路径更新?

    我有一个简单的类名为网络路径监视器看起来如下 class NetworkPathMonitor ObservableObject Cancellable Published var path NWPath nil let monitor N
  • 编译器可以优化从堆到堆栈的分配吗?

    就编译器优化而言 将堆分配更改为堆栈分配是否合法和 或可能 或者这会打破假设规则 https stackoverflow com questions 15718262 what exactly is the as if rule 例如 假设
  • 为什么当构建错误退出时,来自 docker 文件的 docker 构建镜像会创建容器?

    我正在使用 docker 从 docker 文件构建图像 在此过程中发生了一些错误 因此构建退出并显示错误代码 当我跑步时docker images我可以看到未标记的图像 所以我尝试删除它docker rmi xxxxx 但它总是失败 它说
  • 通过react-image-crop模块获取裁剪后的图像

    你能帮我如何通过react image crop模块获得输出 裁剪图像的来源 吗 上传组件如下所示 class MyUpload extends Component constructor super this state src sour
  • 无法在 64 位 Linux 上运行 32 位应用程序

    我安装了 Ubuntu 8 04 64 位的最小安装版 当我尝试运行一些 32 位程序时 例如我的jhead程序 我收到消息No such file or directory 我认为这可能是一个库问题 但是当我这样做时 ldd jhead
  • 将特征用户描述添加到多个自定义 C++ BLE GATT 服务

    我正在尝试使用以下命令将一些特征用户描述添加到我的自定义 BLE GATT 服务中mbed API https developer mbed org teams Bluetooth Low Energy 到目前为止我的工作是基于this h
  • 在 Windows 7 上安装调试工具来分析小型转储

    我一直在尝试安装 调试工具 以便尝试分析服务器崩溃 Windows Server 2008 R2 的转储文件 我过去曾经这样做过 但我找不到如何安装 找到 Windows 7 的调试工具 我读过这篇知识库文章 http support mi
  • CMake 无法从已安装的 Visual Studio 2015 中识别 C 编译器

    我一直在尝试为 vtk 安装 CMake 但收到此错误消息 The C compiler identification is unknown The CXX compiler identification is unknown 我正在使用
  • 将函数存储在列表中并稍后调用它们[重复]

    这个问题在这里已经有答案了 我想将函数存储在列表中 然后在程序中调用该列表中的这些函数 这对我有用 但是我不知道它是否正确 example functions my functions would actually get user inp
  • android AudioRecord 从 MIC 读取幅度

    我正在尝试录制麦克风的声音并绘制实时图表 我能够记录并绘制图表 问题是使用下面的代码记录的值不准确 例如 下图是我在完全没有声音时得到的结果 我看过使用 fft 的示例 但我不确定这对我的情况是否有任何帮助 因为我正在尝试绘制时域图 并且我
  • 通过内存/CPU 效率分析特定时间间隔内的近实时数据所需的想法

    我有一些环境传感器 我想检测温度的突然变化 以及随着时间的推移缓慢的趋势 但是我想根据内存中的参数进行大部分数学计算 参数可能如下所示 取决于改变 注 括号中的项目是在添加数据时实时计算的 5 分钟 导数 最大值 最小值 平均值 最近 3
  • GLUT 只是呈现空白屏幕?

    这是代码 没有任何错误 有什么问题吗 我编译它 命令提示符打开 窗口打开 窗口全是白色的 我将其重新着色为灰色 它也没有绘制我的形状 那么问题是什么 ifdef APPLE include
  • 使用 Delphi 查找特殊驱动器

    我正在尝试在 Delphi 2007 中编写一个小程序 以便在便携式 USB 驱动器插入 Windows 7 计算机时访问该驱动器上的文件 但该驱动器并不显示为标准驱动器号 它出现在 Windows 资源管理器中的便携式设备下 我编写了以下