2011-07-27 2 views
3

WMI를 사용하여 Windows XP 컴퓨터에 연결된 하드웨어 프린터 목록을 가져 오려고합니다. 내가 원했던 것은 이 아니고은 Win32_Printers에서 목록을 가져 오는 것과 같았습니다. 물리적으로 상자에 존재하는 프린터를 얻고 싶기 때문에 "OneNote 드라이버로 보내기"와 같은 모든 "프린터 잡음"을 제거하고 " Microsoft 공유 팩스 드라이버 ","Microsoft XPS 문서 작성기 "등 ...WMI를 사용하여 실제 프린터 목록을 검색하는 방법은 무엇입니까?

WMICodeCreator 도구를 사용하면 로컬/네트워크 등록 정보를 신뢰할 수 없다는 것을 알았습니다 (지금 현재 내 네트워크 프린터 그 네트워크 속성이 false라고 나에게 알려줍니다 ...) 그래서 올바른 정보를 얻는 또 다른 방법이 있는지 알고 싶습니다.

보너스 포인트 내가 컴퓨터에 연결된 USB 프린터를 얻을 수있는 경우 : 내가 "인쇄 지원"의 정확한 설명을 얻을 수 있기 때문에 Win32_USBHub 속성이 정말 여기에 도움이되지 않습니다 :)

+0

Win32_Printer.MarkingTechnology 또는 Win32_Printer.PortName을 찾고 계십니까? – Bijan

+0

불행히도 대답은 '아니오'입니다. 직접 수행 할 수 없습니다. 좋은 추측 만 있으면 도움이 될 것입니다. http://stackoverflow.com/questions/2327763/is-there-a-possibility-to-differ-virtual-printer-from-physical-one을 참조하십시오. – Lizz

답변

0

I을 다만 실제 프린터가 나는 이것이 정말 오래된 게시물입니다 알고 unidrv.dll

string query = "select * from Win32_PrinterDriver"; 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); 
ManagementObjectCollection collection = searcher.Get(); 

foreach (ManagementObject obj in collection) 
{ 
    Console.WriteLine(obj["Name"].ToString()); 
    Console.WriteLine(obj["DriverPath"].ToString()); 
    Console.WriteLine(); 
} 
+0

올바르지 않습니다. 많은 물리적 프린터는'unidrv' 이외의 드라이버를 사용하며 많은 가상 프린터는'unidrv'를 사용합니다. 사용중인 드라이버에 따라 프린터가 물리적인지 또는 가상인지 알 수 없습니다. –

1

를 사용하지만이 같은 요구 사항으로 실행하고 다음 사람이 함께 오기를 내 최종 결과를 게시 할 생각이라고 생각합니다.

Dim oWMI, colPrinters, oItem, oPrinter 
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 
Set colPrinters = oWMI.ExecQuery("Select * From Win32_Printer where PrintProcessor <> 'winprint'") 

For Each oPrinter in colPrinters 
    If oPrinter.Attributes And 64 Then 
     Wscript.Echo oPrinter.Name 
    End If 
Next 
+0

이 정보를 원격으로 가져 오는 경우에는 작동하지 않습니다. –

관련 문제