![]() |
#2
lin88122902011-08-03 19:34
但是改成这样编译又通不过,高手们指点下! //枚举设备函数 function TForm1.EnumAddDevices(ShowHidden: Boolean; hwndTree: TTreeView; DevInfo: hDevInfo): Boolean; var i, Status, Problem: DWord; pszText: PChar; DeviceInfoData: TSPDevInfoData; iImage: Integer; begin TTreeView(hWndTree).Items.BeginUpdate; //TreeView列表开始更新 DeviceInfoData.cbSize := SizeOf(TSPDevInfoData); //TreeView清除所有的项 TTreeView(hWndTree).Items.Clear; i := 0; //枚举所有的设备 while SetupDiEnumDeviceInfo(DevInfo, i, DeviceInfoData) do begin inc(i); //显示这个设备或把它放到下一个之上 if(CM_Get_DevNode_Status(@Status, @Problem, DeviceInfoData.DevInst, 0) <> CR_SUCCESS) then begin break; end; if(not (ShowHidden or not(Boolean(Status and DN_NO_SHOW_IN_DM)))) then begin break; end; GetMem(pszText, 256); try //获取详细的设备信息 ConstructDeviceName(DevInfo, DeviceInfoData, pszText, DWord(nil)); if pos('STM SD Flash Disk USB Device', StrPas(pszText)) <> 0 then //比较字符串,找到USB存储设备 begin //获取设备的图标 if(GetClassImageIndex(DeviceInfoData.ClassGuid, @iImage)) then begin with TTreeView(hWndTree).Items.AddObject(nil, pszText, nil) do begin TTreeView(hWndTree).Items[i - 1].ImageIndex := iImage; TTreeView(hWndTree).Items[i - 1].SelectedIndex := iImage; end; if(Problem = CM_PROB_DISABLED) then //红色的(X) begin TTreeView(hWndTree).Items[i - 1].OverlayIndex := IDI_DISABLED_OVL - IDI_CLASSICON_OVERLAYFIRST; end else begin if(Boolean(Problem)) then //黄色的(!) begin TTreeView(hWndTree).Items[i - 1].OverlayIndex := IDI_PROBLEM_OVL - IDI_CLASSICON_OVERLAYFIRST; end; end; if(Status and DN_NO_SHOW_IN_DM = DN_NO_SHOW_IN_DM) then //灰色的没有连接 begin TTreeView(hWndTree).Items[i - 1].Cut := true; end; end; end; finally FreeMem(pszText); end; end; TTreeView(hWndTree).Items.EndUpdate; Result := true; end; |
只有本站会员才能查看附件,请 登录
这是一个列举出所有设备的例子 show hidden device之后可以看到U盘可是怎么让它只显示U盘设备呢?还能Disable和Enable呢?
如果改成这样是能只显示U盘,但不能Disable和Enable ('STM SD Flash Disk USB Device'U盘是设备名)
function TForm1.EnumAddDevices(ShowHidden: Boolean; hwndTree: TTreeView; DevInfo: hDevInfo): Boolean;
var
i, Status, Problem: DWord;
pszText: PChar;
DeviceInfoData: TSPDevInfoData;
iImage: Integer;
begin
TTreeView(hWndTree).Items.BeginUpdate; //TreeView列表开始更新
DeviceInfoData.cbSize := SizeOf(TSPDevInfoData);
//TreeView清除所有的项
TTreeView(hWndTree).Items.Clear;
i := 0;
//枚举所有的设备
while SetupDiEnumDeviceInfo(DevInfo, i, DeviceInfoData) do
begin
inc(i);
//显示这个设备或把它放到下一个之上
if(CM_Get_DevNode_Status(@Status, @Problem, DeviceInfoData.DevInst, 0) <> CR_SUCCESS) then
begin
break;
end;
if(not (ShowHidden or not(Boolean(Status and DN_NO_SHOW_IN_DM)))) then
begin
break;
end;
GetMem(pszText, 256);
try
//获取详细的设备信息
ConstructDeviceName(DevInfo, DeviceInfoData, pszText, DWord(nil));
if pos('STM SD Flash Disk USB Device', StrPas(pszText)) <> 0 then //比较字符串,找到USB存储设备
begin
TTreeView(hWndTree).Items.AddObject(nil, pszText, nil);
end;
finally
FreeMem(pszText);
end;
end;
TTreeView(hWndTree).Items.EndUpdate;
Result := true;
end;