- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试找出如何检测驱动器是否是大容量存储设备。我可以获得驱动器号,但无法弄清楚如何检测它是什么类型的设备。我正在尝试检测 Garmin GPS 接收器是否以大容量存储模式连接到 PC。
最佳答案
您可以使用WMI对于此任务,存在几个可以帮助您确定该信息的类,从 Win32_USBHub
开始检查属性 Description 中的值 Mass Storage Device
,同时查看 Win32_PNPEntity
类(class)。如果您没有从 Delphi 访问 WMI 的经验,请尝试使用 Wmi delphi code creator
更新
要将 Win32_USBHub 或 Win32_USBControllerDevice WMI 类返回的值与磁盘驱动器号关联起来,您必须执行以下步骤
dependent
属性中提取的DeviceID
,检查使用如下WQL语句链接到Win32_DiskDrive的Win32_PnPEntity类: {Win32_PnPEntity.DeviceID="DeviceID"} 的关联器,其中 ResultClass = Win32_DiskDrive
检查此示例代码
{$APPTYPE CONSOLE}
{$R *.res}
uses
Types,
StrUtils,
SysUtils,
ActiveX,
ComObj,
Variants;
procedure ScanUSBPnpDevices;
const
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
objWMIService : OLEVariant;
USBControllerDevices: OLEVariant;
USBControllerDevice : OLEVariant;
EnumUSBDevice : IEnumvariant;
PnPEntities : OLEVariant;
PnPEntity : OLEVariant;
EnumPnPEntity : IEnumvariant;
DiskDrives : OLEVariant;
DiskDrive : OLEVariant;
EnumDiskDrive : IEnumvariant;
DiskPartitions : OLEVariant;
DiskPartition : OLEVariant;
EnumDiskPartition : IEnumvariant;
iValue : LongWord;
DeviceID : string;
DiskDeviceID : string;
DiskPartID : string;
StringDynArray : TStringDynArray;
begin;
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
objWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
//This will scan all the usb device, you can filter this WQL sentece using any property of this class, to speed-up the process.
USBControllerDevices := objWMIService.ExecQuery('SELECT Dependent FROM Win32_USBControllerDevice','WQL',wbemFlagForwardOnly);
EnumUSBDEvice := IUnknown(USBControllerDevices._NewEnum) as IEnumVariant;
while EnumUSBDEvice.Next(1, USBControllerDevice, iValue) = 0 do
begin
StringDynArray:=SplitString(USBControllerDevice.Dependent, '=');
DeviceID:=StringDynArray[1];
Writeln(Format('USB Controller Device Device ID %s',[DeviceID]));
PnPEntities := objWMIService.ExecQuery(Format('ASSOCIATORS OF {Win32_PnPEntity.DeviceID=%s} WHERE ResultClass = Win32_DiskDrive',[DeviceID]),'WQL',wbemFlagForwardOnly);
EnumPnPEntity := IUnknown(PnPEntities._NewEnum) as IEnumVariant;
while EnumPnPEntity.Next(1, PnPEntity, iValue) = 0 do
begin
//Escape the `\` chars in the DeviceID value because the '\' is a reserved character in WMI.
DiskDeviceID := PnPEntity.DeviceId;
Writeln(Format(' Disk Drive Device ID %s',[DiskDeviceID]));
DiskDeviceID := StringReplace(DiskDeviceID,'\','\\',[rfReplaceAll]);;
DiskDrives := objWMIService.ExecQuery(Format('ASSOCIATORS OF {Win32_DiskDrive.DeviceID="%s"} WHERE AssocClass = Win32_DiskDriveToDiskPartition',[DiskDeviceID]),'WQL',wbemFlagForwardOnly);
EnumDiskDrive := IUnknown(DiskDrives._NewEnum) as IEnumVariant;
while EnumDiskDrive.Next(1, DiskDrive, iValue) = 0 do
begin
DiskPartID:=DiskDrive.deviceID;
Writeln(Format(' Disk Partition ID %s',[DiskPartID]));
DiskPartitions:=objWMIService.ExecQuery(Format('ASSOCIATORS OF {Win32_DiskPartition.DeviceID="%s"} WHERE AssocClass = Win32_LogicalDiskToPartition',[DiskPartID]),'WQL',wbemFlagForwardOnly);
EnumDiskPartition := IUnknown(DiskPartitions._NewEnum) as IEnumVariant;
while EnumDiskPartition.Next(1, DiskPartition, iValue) = 0 do
begin
Writeln(Format(' Drive Letter %s',[String(DiskPartition.DeviceID)]));
DiskPartition:=Unassigned;
end;
DiskDrive:=Unassigned;
end;
PnPEntity:=Unassigned;
end;
USBControllerDevice:=Unassigned;
end;
end;
begin
try
CoInitialize(nil);
try
ScanUSBPnpDevices;
finally
CoUninitialize;
end;
except
on E:Exception do
Writeln(E.Classname, ':', E.Message);
end;
Readln;
end.
这会返回类似这样的东西。
USB Controller Device Device ID "USBSTOR\\DISK&VEN_HP&PROD_V100W&REV_1.00\\3S980
62800DD&0"
Disk Drive Device ID \\.\PHYSICALDRIVE1
Disk Partition ID Disk #1, Partition #0
Drive Letter F:
关于delphi - 如何检测 Garmin GPS 设备是否以大容量存储模式连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9525996/
我在 iOS 上有一个使用 WebSQL 数据库的 PhoneGap 应用程序。在某些地方,我读到存储容量是 5MB,而在其他地方,我读到它是 50MB,有人可以帮我解决这个问题吗?我还计划在数据库中
我想弄清楚如何更新节点的 pod 容量。我使用文档中概述的 Vagrant/VM 环境进行了简单的集群设置。我尝试使用 kubectl 修补节点的 pod 容量,执行以下操作: 通过以下方式发送补丁所
我想创建一个函数,根据某人系统上的可用 RAM 大小来导入不同批处理的数据。但是如何找到 R 中的可用 RAM 量呢?我可以使用 memory.size() 但这只适用于 Windows。 最佳答案
目前,我正在努力将 Power BI 内容嵌入到我的 Web 应用程序中。我已经通过服务主体实现了它,并且它按预期工作。但是对于产品环境,是否必须为我的报告或工作区添加容量?是否可以在不增加生产环境容
我有一个 3 节点 coros kubernetes 集群启动并运行。 我想使用来自独立 NFS 服务器的 persitentvolumes(pv)。 nfs.yaml apiVersion: v1
我正在学习golang一段时间。我遇到了 channel 问题。 我有两个例子。它们看起来一样,但是其中1个给出了错误。 当我分配 channel 容量(转换为缓冲 channel )时,问题已解决,
我正在尝试创建一个子例程,将一个字符串插入另一个字符串。我想检查主机字符串是否有足够的容量来容纳所有字符,如果没有,则返回错误整数。这需要使用类似 sizeof 的东西,但可以使用指针调用。我的代码如
这个问题在这里已经有了答案: size vs capacity of a vector? (8 个答案) 关闭 7 年前。 在下面的程序中,我只是创建了一个空 vector ,然后将大小调整为 5
免责声明 1 - 我是编程新手免责声明 2 - 我搜索了又搜索,但找不到我正在寻找的帮助。 对于一个项目,我或多或少地以更精简的形式重写了 vector 类。我挂断的部分是编写 push_back 方
我对 BTree 的理解是: if root BTree size is 32, the level 1 have 1024 keys capacity the level 2 can sort 10
我有一个使用 ActionBar 的应用程序,我自己处理方向更改: android:configChanges="keyboard|keyboardHidden|orientation|screenS
如何将 hadoop DFS 的配置容量从默认的 50GB 增加到 100GB? 我目前的设置是在 centOS6 机器上运行的 hadoop 1.2.1,使用了 450GB 中的 120GB。已使用
我的问题是关于 slice 长度和容量。我在这里学习 Go:https://tour.golang.org/moretypes/11 . (我的问题被标记为可能与 this 重复;但是,事实并非如此。
现在尝试从教程中学习 Go,并且有一个非常基本的问题: func main() { a := make([]int, 5) // [0,0,0,0,0] len=5 cap=5 b :=
如何以以下格式获取有关数据库中所有表空间的信息。 TABLESPACE_NAME | FILE_NAME | ALLOCATED_MB | FREE_MB | CAPACITY | 有没有办法自
我想基于每个作业更改群集的减少插槽容量。也就是说, 最初,我为Tasktracker配置了8个reduce插槽,因此对于具有100个reduce任务的作业,将同时运行(8 * datanode数量)r
我正在运行单节点 Hadoop 部署。我知道我的应用程序需要多少数据,我可以设置(和重新设置)HDFS 使用的最大容量吗? 我已经尝试了以下方法,但似乎无法实现。 检查 hdfs-site.xml 和
我安装了 splunk 来监控和分析 hadoop 作业。我在其他节点的Jobtracker、forwarder和TA中安装splunk core和splunk hadoop app后,HDFS ca
vector::operator= 会改变 vector 容量吗?如果有,怎么做? vector的拷贝构造函数是否拷贝容量? 我查看了文档,但找不到具体答案。是否依赖于实现? 最佳答案 您可以保证:
将 SQL 数据库导出到存储时,我们的 DTU 容量已达到,这本质上意味着我们的系统性能受到严重影响。 这对我们来说是一个问题,因为我们使用导出功能来备份和移动数据库。 这个问题有解决办法吗? 最佳答
我是一名优秀的程序员,十分优秀!