2013-04-09 27 views
15

Tôi liệt kê các máy in được kết nối trong PC. Tôi đã thực hiện nó bằng cách sử dụng không gian tên C# System.Printing. Nó hoạt động tốt. Nhưng chủ yếu là nó cho thấy máy in phần mềm như Microsoft XPS tài liệu nhà văn, Microsoft Fax vv Tôi muốn biết là nó có thể loại bỏ các máy in ssoftware từ đếm. Mã tôi đã thực hiện được hiển thị bên dưới:Xác định máy in gốc

PrintQueue printQueue = null; 

LocalPrintServer localPrintServer = new LocalPrintServer(); 

// Retrieving collection of local printer on user machine 
PrintQueueCollection localPrinterCollection = 
    localPrintServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, 
              EnumeratedPrintQueueTypes.Connections }); 

System.Collections.IEnumerator localPrinterEnumerator = 
    localPrinterCollection.GetEnumerator(); 

while (localPrinterEnumerator.MoveNext()) 
{ 
    // Get PrintQueue from first available printer 
    printQueue = (PrintQueue)localPrinterEnumerator.Current; 

    if (!printQueue.IsOffline) 
    { 
     MessageBox.Show(printQueue.FullName.ToString()); 
     string s = "Printer found " + printQueue.FullName.ToString(); 
     listBox1.Items.Add(s); 
    } 
    else 
    { 
     // No printer exist, return null PrintTicket 
     // return null; 
    } 
} 

Trả lời

6

Cách duy nhất tôi tìm thấy là so sánh tên máy in mong muốn với máy in mà chúng tôi đang nhận được.

12

Chìa khóa để phân biệt máy in thực từ máy in ảo là cổng mà máy in đang sử dụng. Máy in thực sử dụng các cổng phần cứng như cổng LPT1: hoặc cổng USB. Máy in ảo sử dụng các cổng định hướng phần mềm.

Biến chứng sẽ là máy in mạng. Nó sẽ không dễ dàng xác định nếu một máy in mạng đang sử dụng một cổng phần cứng.

Tôi biết đây không phải là câu trả lời hay nhưng bạn đã đặt ra một câu hỏi rất khó. Tôi hy vọng nó sẽ giúp bạn bắt đầu đi đúng hướng.

+0

Điều rất hài hước là tôi đang sử dụng máy in mạng :) – Zigma

+1

Tôi đã đưa ra rất nhiều suy nghĩ trong vài ngày qua và tôi nghĩ rằng tôi biết hệ thống con in của Windows cũng như bất cứ ai bên ngoài Microsoft, và ... tốt, tôi sợ tôi không nghĩ rằng có một cách để phân biệt đáng tin cậy giữa phần cứng và máy in ảo trong mọi trường hợp. Tôi có thể cung cấp cho bạn một giải pháp "thường đúng", nhưng tôi không nghĩ rằng một giải pháp "luôn luôn đúng" là có thể. Lấy làm tiếc. :-( –

3

Vài quan sát:

  1. Trong Properties cửa sổ Device Settings trang chỉ có sẵn cho các máy in Real và KHÔNG cho máy in ảo. Và hầu hết các giá trị này đều có sẵn trong số printQueue.UserPrintTicket thuộc tính

  2. printQueue.QueuePort.Name chứa địa chỉ IP được nối với hoặc không có tên cổng. ví dụ: "20.120.12.22_1" hoặc "20.120.12.22" cho máy in Bất

enter image description here

+0

Trình điều khiển in và giám sát cổng điều khiển cả hai thứ này và có thể làm như mong muốn. Tôi có thể hiển thị cho bạn các ví dụ không khớp với kết quả tìm kiếm của bạn –

+0

@CareyGregory: Sẽ kiểm tra điều đó..Cảm ơn! –

+0

Điều này là sai. máy in phần mềm cũng có các cổng với chúng – Zigma

Các vấn đề liên quan