linux 读取u盘特征码,Delphi 通过WMI获取U盘硬件特征码

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls,ActiveX, ComObj, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{

Private declarations

}

public

{

Public declarations

}

end;

var

Form1: TForm1;

implementation

{

$R *.dfm

}

procedure TForm1.Button1Click(Sender: TObject);

var

Locator:OleVariant;

WMI:OleVariant;

RET:OleVariant;

Enum:IEnumVariant;

Tmp:OleVariant;

Value:Cardinal;

begin

Locator:=CreateOleObject('WbemScriptingSWbemLocator');

WMI := Locator.ConnectServer('.', '', '', '');

Ret := WMI.ExecQuery('SELECT * FROM Win32_USBHub');//这里Win32_USBHub为检测项,详见下表

//这里Win32_USBHub为检测项,详见下表

Enum:= IUnknown(RET._NewEnum) as IEnumVariant;

while (Enum.Next(1, Tmp, Value) = S_OK) do

begin

if Tmp.Name='USB Mass Storage Device' then

ShowMessage('这个U盘的硬件特征码是'+Tmp.PNPDeviceID);

//Tmp为检测到返回的数据集合,其中PNPDeviceID为集合中的对象,包含了PID和VID码

end;

end;

end.

//Win32_USBHub只是冰山一角,常用的还有以下

//Win32_1394Controller

//Win32_BaseBoard

//Win32_Battery

//Win32_BIOS

//Win32_Bus

//Win32_CacheMemory

//Win32_CDROMDrive

//Win32_CurrentProbe

//Win32_DesktopMonitor

//Win32_DeviceMemoryAddress

//Win32_DiskDrive

//Win32_DisplayConfiguration

//Win32_DisplayControllerConfiguration

//Win32_DMAChannel

//Win32_Fan

//Win32_FloppyController

//Win32_FloppyDrive

//Win32_HeatPipe

//Win32_IDEController

//Win32_InfraredDevice

//Win32_IRQResource

//Win32_Keyboard

//Win32_MemoryArray

//Win32_MemoryDevice

//Win32_MotherboardDevice

//Win32_NetworkAdapter

//Win32_NetworkAdapterConfiguration","

//Win32_OnBoardDevice

//Win32_ParallelPort

//Win32_PCMCIAController

//Win32_PhysicalMemory

//Win32_PhysicalMemoryArray

//Win32_PnPEntity

//Win32_PointingDevice

//Win32_PortableBattery

//Win32_PortConnector

//Win32_PortResource

//Win32_POTSModem

//Win32_PowerManagementEvent

//Win32_Printer

//Win32_PrinterConfiguration

//Win32_PrintJob

//Win32_Processor

//Win32_Refrigeration

//Win32_SerialPort

//Win32_SerialPortConfiguration

//Win32_SMBIOSMemory

//Win32_SoundDevice

//Win32_SystemEnclosure

//Win32_SystemMemoryResource

//Win32_SystemSlot

//Win32_TapeDrive

//Win32_TemperatureProbe

//Win32_UninterruptiblePowerSupply

//Win32_USBController

//Win32_VideoConfiguration

//Win32_VideoController

//Win32_VoltageProbe

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux读取U盘或者移动硬盘序列号并获取U盘或者移动硬盘分区名。基本原理如下: 当有外置 USB 插入的时候,会产生 /proc/scsi/usb-storage 目录,并在其中产生数字文件(形如 1 2 3 4),此文件存储了设备相关信息。 相应的 /sys/class/scsi_device/ 目录中会有 scsi 设备的目录(ide 硬盘默认无子目录,sata硬盘默认有子目录),以数字开头(形如 1:0:0:0 2:0:0:0) 这个数字与前面 /proc/scsi/usb-storage目录中的相对应,子目录表示sata硬盘。比如 /sys/class/scsi_device/2:0:0:0/device/block 中有USB设备,从该目录下得到U盘或者移动硬盘的分区名,比如sda1。 该demo实现了上述过程,先检查 /proc/scsi/usb-storage 目录,看是否有u盘或者移动硬盘接入,如果有则读取u盘或者移动硬盘的序列号,然后在/sys/class/scsi_device/目录下逐级查找,直到找到u盘或者移动硬盘的分区。 完整代,可直接编译和测试,嵌入式环境下也是适应的。 在linux测试如下,id表示序列号,sdb1表示是分区名称: # ./a.out udisk dev num:0 udisk id:055CE21B ret:0 dev num:0 found dir:0:0:0:1 found dev dir:0:0:0:1,full path:/sys/class/scsi_device/0:0:0:1 sub founction found dir:sda found sd device dir:sda,full path:/sys/class/scsi_device/0:0:0:1/device/block/sda found dir:0:0:0:2 found dev dir:0:0:0:2,full path:/sys/class/scsi_device/0:0:0:2 sub founction found dir:sdb found sd device dir:sdb,full path:/sys/class/scsi_device/0:0:0:2/device/block/sdb found sd sub device dir:sdb1 found dir:0:0:0:0 found dev dir:0:0:0:0,full path:/sys/class/scsi_device/0:0:0:0 sub funciton Open Directory /sys/class/scsi_device/0:0:0:0/device/block Error:No such file or directory get name return:0,disk name:sdb1 # 因为有的USB设备会有好几个,比如把CD和U盘集成到一起,就会出现上面的情况,有多个子目录去查找。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值