如何获得指定设备的盘符?(200分)

  • 主题发起人 主题发起人 iikiki
  • 开始时间 开始时间
I

iikiki

Unregistered / Unconfirmed
GUEST, unregistred user!
就是说,我现在通过WMI查询出了系统的USB存储设备 ,如何获得指定设备的盘符?
 
给点分吧 没分了~
 
路过....学习..
 
function GetDiskLetter(const phiscalDeviceName:string):string;//根据物理名称得到盘符
var
buffer:array [0..255] of char ;
i,j:integer;
DiskLetter:string;
vpath:array [0..1023] of char;
begin
Result:='';
GetLogicalDriveStrings(256,buffer);
i:=0;
j:=0;
while buffer<>#0 do
begin
DiskLetter:=buffer+':';
QueryDosDevice(pchar(DiskLetter),vpath,1024);
if StrPas(vpath)=phiscalDeviceName then
begin
Result:=DiskLetter;
Exit;
end;
inc(j);
i:=j*4;
if i>256 then break ;
end;
end;
 
帮顶一个,顺便发个交流群:delphi天堂群:4654765,不守群规者勿扰
 
to 浪人情哥:
谢谢。。。我插入的USB设备名称 和WMI的给出的设备 怎么匹配?能否指导一下?
 
取到物理名称没有
 
物理名称 每次都不一样啊。。。
 
贴出你的代码吧
 
用WMI获取USB信息
procedure TForm2.GetUDiskInfo;
var
Tmp: OleVariant;
Locator: OleVariant;
WMI: OleVariant;
RET: OleVariant;
Enum: IEnumVariant;
Value: Cardinal;
Str:string;
T:TUSB;
begin;
USBList.Clear;
USBL.Clear;
Locator := CreateOleObject('WbemScripting.SWbemLocator');
WMI := Locator.ConnectServer('.','', '','');
Ret := WMI.ExecQuery('SELECT * FROM Win32_USBHub'
Enum:= IUnknown(RET._NewEnum) as IEnumVariant;
while (Enum.Next(1, Tmp, Value) = S_OK) do
begin PNPDeviceID
Str:=Tmp.PNPDeviceID;
USBList.Items.Add(Str);
QueryUSB2(Str,T);
USBL.Add(T.USB_FName);
end;
end;
end;

设备的 PID VID Fname都能获得 能不能像 Windows 右键单击某个磁盘 在属性窗口可以为某个设备 导入卷 就能看出来这个设备有多少个盘
 
function GetWMIProperty(WMIType, WMIProperty:String):String;
var
Wmi, Objs, Obj:OleVariant;
Enum:IEnumVariant;
C:Cardinal;
begin
Wmi:= CreateOleObject('WbemScripting.SWbemLocator');
Objs := Wmi.ConnectServer('.','root/cimv2').ExecQuery('Select * from Win32_'+ WMIType);
Enum:=IEnumVariant(IUnknown(Objs._NewEnum));
Enum.Reset;
while Enum.Next(1,Obj,C)=s_ok do
begin
Obj:=Obj.Properties_.Item(WMIProperty,0).Value;
form1.Memo1.Lines.Add(obj);
if VarIsArray(Obj) then Result:=Obj[0]
else Result:=Obj;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
s:String;
begin
s:=getwmiproperty('LogicalDisk','Name');
showmessage(s);
end;
请参考http://blog.csdn.net/yuzl32/archive/2007/03/12/1527384.aspx
 
后退
顶部