2014-06-05 24 views
1

如果打印機出現問題,Windows的設備管理器會在相關打印機旁邊顯示一個特殊圖標。檢測設備(打印機,掃描儀,鼠標等)是否無法正常工作

我正在使用Delphi XE2,我想知道如何以編程方式檢測Windows XP或更高版本的這種信息,即。

function DetectDriversProblems() : TStringList; 
begin 
    // Scan Computer or query Windows to know if a driver has issues and 
    // return list of faulty hardware (if any) 
end; 

回答

4

可以使用Win32_PnPEntity WMI類和ConfigManagerErrorCode財產。

{$APPTYPE CONSOLE} 

uses 
    SysUtils, 
    ActiveX, 
    ComObj, 
    Variants; 

    Procedure ListDevicesConfigError; 
    const 
     wbemFlagForwardOnly = $00000020; 
    var 
     FSWbemLocator : OLEVariant; 
     FWMIService : OLEVariant; 
     FWbemObjectSet: OLEVariant; 
     FWbemObject : OLEVariant; 
     oEnum   : IEnumvariant; 
     iValue  : LongWord; 
    begin; 
     FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); 
     FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\cimv2', '', ''); 
     FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_PnPEntity WHERE ConfigManagerErrorCode <> 0','WQL',wbemFlagForwardOnly); 
     oEnum   := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant; 
     while oEnum.Next(1, FWbemObject, iValue) = 0 do 
     begin 
     Writeln(Format('Class GUID %s',[String(FWbemObject.ClassGUID)])); 
     Writeln(Format('Description %s',[String(FWbemObject.Description)])); 
     Writeln(Format('Device ID %s',[String(FWbemObject.DeviceID)])); 
     Writeln(Format('Manufacturer %s',[String(FWbemObject.Manufacturer)])); 
     Writeln(Format('Name %s',[String(FWbemObject.Name)])); 
     Writeln(Format('PNP Device ID %s',[String(FWbemObject.PNPDeviceID)])); 
     Writeln(''); 
     FWbemObject:=Unassigned; 
     end; 
    end; 

begin 
try 
    CoInitialize(nil); 
    try 
     ListDevicesConfigError; 
    finally 
     CoUninitialize; 
    end; 
except 
    on E:EOleException do 
     Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode])); 
    on E:Exception do 
     Writeln(E.Classname, ':', E.Message); 
end; 
Writeln('Press Enter to exit'); 
Readln;  
end. 
+0

輝煌,感謝的人! – TheDude

相關問題