2008-10-01 4 views
1

필자는 C#을 사용하는 것이 바람직하지만 C++는 Windows 인쇄 대화 상자의 프린터 목록을 필터링하여 모든 Windows 인쇄를 필터링하는 방법을 찾아야합니다.프린터의 PrintDialog 필터 목록 프린터 목록

나는 WinAPIOverride를 보았고 프린터 목록을 얻는 방법을 재정의 한 자신의 dll을 작성해야한다고 생각했습니다. 필터 목록을 필터링 한 다음 반환했습니다. 그런 다음 모든 실행중인 프로세스에 DLL을 주입해야합니다.

아무도 이미 개발되었거나이를 달성하기위한 더 쉬운 방법으로 나를 도울 수 있습니까? 프린터 목록이 나오는 유일한 방법은 API 메서드 호출에서 왔으며 레지스트리 수정을 고려해 봤지만 인쇄 대화 상자의 응답 속도가 느려져 사용자에게 성가 시게됩니다.

답변

2

저는 (다시) DLL을 작성하는 것이 가장 쉬운 방법이라고 생각하지 않습니다. information (printers in this case)을 검색하려면 WMI을 사용하지 않으시겠습니까? (here에서 차용 코드 샘플)

ManagementScope objScope = new ManagementScope(ManagementPath.DefaultPath); //For the local Access 
    objScope.Connect(); 

    SelectQuery selectQuery = new SelectQuery(); 
    selectQuery.QueryString = "Select * from win32_Printer"; 
    ManagementObjectSearcher MOS = new ManagementObjectSearcher(objScope, selectQuery); 
    ManagementObjectCollection MOC = MOS.Get(); 
    foreach (ManagementObject mo in MOC) { 
     listBox1.Items.Add(mo["Name"].ToString().ToUpper()); 
    } 

얻을 도메인 건너 알려진 프린터이 사용하려면 :

ConnectionOptions objConnection = new ConnectionOptions(); 
objConnection.Username = "USERNAME"; 
objConnection.Password = "PASSWORD"; 
objConnection.Authority = "ntlmdomain:DDI"; //Where DDI is the name of my domain 
// Make sure the user you specified have enough permission to access the resource. 

ManagementScope objScope = new ManagementScope(@"\\10.0.0.4\root\cimv2",objConnection); //For the local Access 
objScope.Connect(); 

SelectQuery selectQuery = new SelectQuery(); 
selectQuery.QueryString = "Select * from win32_Printer"; 
ManagementObjectSearcher MOS = new ManagementObjectSearcher(objScope, selectQuery); 
ManagementObjectCollection MOC = MOS.Get(); 
foreach (ManagementObject mo in MOC) { 
    listBox1.Items.Add(mo["Name"].ToString().ToUpper()); 
} 

다음 코드는 모든 로컬에 설치된 프린터를 검색하는 것입니다 물론, 어떤 기준도 지정하지 않았 으면 원하는대로 목록이 "필터링"되지 않습니다. 하지만 여기서부터 스스로 관리 할 수 ​​있다고 확신합니다.

0

흥미로운 코드 주셔서 감사합니다.

아이디어는 필터링 된 프린터 목록을 사용자와 간섭하지 않고 가능한 한 전체적으로 시스템에 적용하는 것입니다. 이것은 필터링 된 목록이 불행히도 표준 Windows 인쇄 대화 상자에 적용되어야 함을 의미합니다 ...

따라서 멋진 WMI 코드는 적합하지 않습니다. 내 자신의 인쇄 대화 상자를 만들면 꽤 유용 할 수 있습니다.)