如何在Windows中列出物理磁盘?为了获得"\\\\.\PhysicalDrive0"
可用的列表.
我在Lazarus编程论坛上询问如何打开物理磁盘.我想允许用户在单击"选择磁盘"按钮时从系统中选择物理磁盘.Stack Overflow中有一些类似但不完全相同的示例(例如Delphi - 使用DeviceIoControl传递IOCTL_DISK_GET_LENGTH_INFO来获取闪存介质的物理大小(非分区)).
有很多C和C++使用的例子CreateFile
(在文档中,特别是调用的例子DeviceIoControl
)但我找不到任何Free Pascal或Delphi,我还不够好,我还没有找到如何做到这一点.
任何人都可以指向我解释它的链接的方向或更好仍然是用Delphi或Free Pascal编写的实际示例?任何人都可以帮我理解如何使用它吗?
我正在尝试枚举COM端口的"友好名称".随着USB串行设备在运行时连接和断开,端口可能会动态变化.
基于此问题中描述的可能方法,我尝试使用SetupDiGetClassDevs方法.
我找到了这个示例代码,但它是为旧版本的setupapi单元编写的(homepages.borland.com的原始链接当然不起作用).
我尝试使用当前JVCL(JVCL340CompleteJCL221-Build3845)中的setupapi单元,但它似乎与Delphi 7不兼容.我收到编译器错误:
if SetupDiGetDeviceRegistryProperty(DevInfoHandle,DeviceInfoData,
RegProperty,
@PropertyRegDataType,
@S1[1],RequiredSize,@RequiredSize) then begin
Run Code Online (Sandbox Code Playgroud)
在函数SetupDiGetDeviceRegistryProperty的调用中,我在参数@PropertyRegDataType和@RequiredSize上得到错误"实际和形式参数的类型必须相同" .
Delphi3000站点说该代码是在2004年编写的,适用于Delphi 7,所以我不知道为什么它现在不适用于Delphi 7,除非setupapi已经改变.是否有人熟悉setupapi可能导致这些问题的更改?
我正在测试一个简单的控制台程序.uses语句是"windows,sysutils,classes,setupAPI,Registry;"
主要计划是:
begin
ComPortStringList := SetupEnumAvailableComPorts;
for Index := 0 to ComPortStringList.Count - 1 do
writeln(ComPortStringList[Index]);
end;
end.
Run Code Online (Sandbox Code Playgroud) delphi ×2
c ×1
enumerate ×1
fpc ×1
freepascal ×1
hard-drive ×1
lazarus ×1
serial-port ×1
winapi ×1
windows ×1