2009-10-26 60 views

回答

23

此段代碼將檢索有關安裝打印機的信息:

using System.Drawing.Printing; 
//... 

    foreach (string printerName in PrinterSettings.InstalledPrinters) 
    { 
    // Display the printer name. 
    Console.WriteLine("Printer: {0}", printerName); 

    // Retrieve the printer settings. 
    PrinterSettings printer = new PrinterSettings(); 
    printer.PrinterName = printerName; 

    // Check that this is a valid printer. 
    // (This step might be required if you read the printer name 
    // from a user-supplied value or a registry or configuration file 
    // setting.) 
    if (printer.IsValid) 
    { 
     // Display the list of valid resolutions. 
     Console.WriteLine("Supported Resolutions:"); 

     foreach (PrinterResolution resolution in 
     printer.PrinterResolutions) 
     { 
     Console.WriteLine(" {0}", resolution); 
     } 
     Console.WriteLine(); 

     // Display the list of valid paper sizes. 
     Console.WriteLine("Supported Paper Sizes:"); 

     foreach (PaperSize size in printer.PaperSizes) 
     { 
     if (Enum.IsDefined(size.Kind.GetType(), size.Kind)) 
     { 
      Console.WriteLine(" {0}", size); 
     } 
     } 
     Console.WriteLine(); 
    } 
    } 

另一種選擇是使用WMI。右鍵點擊項目>添加引用>選擇.NET選項卡> System.Management

using System.Management; 
// ... 

    private List<string> GetPrinters() 
    {  
     List<string> printerNames = new List<string>(); 

     // Use the ObjectQuery to get the list of configured printers 
     System.Management.ObjectQuery oquery = 
      new System.Management.ObjectQuery("SELECT * FROM Win32_Printer"); 

     System.Management.ManagementObjectSearcher mosearcher = 
      new System.Management.ManagementObjectSearcher(oquery); 

     System.Management.ManagementObjectCollection moc = mosearcher.Get(); 

     foreach (ManagementObject mo in moc) 
     { 
      System.Management.PropertyDataCollection pdc = mo.Properties; 
      foreach (System.Management.PropertyData pd in pdc) 
      { 
       if ((bool)mo["Network"]) 
       { 
        printerNames.Add(mo[pd.Name]); 
       } 
      } 
     } 

     return printerNames; 

    } 

這裏的另一個片段,顯示更多的屬性:

static void PrintProps(ManagementObject o, string prop) 
    { 
     try { Console.WriteLine(prop + "|" + o[prop]); } 
     catch (Exception e) { Console.Write(e.ToString()); } 
    } 

    static void Main(string[] args) 
    { 

     ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer"); 

     foreach (ManagementObject printer in searcher.Get()) 
     { 
      string printerName = printer["Name"].ToString().ToLower(); 
      Console.WriteLine("Printer :" + printerName); 

      PrintProps(printer, "Caption"); 
      PrintProps(printer, "ExtendedPrinterStatus"); 
      PrintProps(printer, "Availability"); 
      PrintProps(printer, "Default"); 
      PrintProps(printer, "DetectedErrorState"); 
      PrintProps(printer, "ExtendedDetectedErrorState"); 
      PrintProps(printer, "ExtendedPrinterStatus"); 
      PrintProps(printer, "LastErrorCode"); 
      PrintProps(printer, "PrinterState"); 
      PrintProps(printer, "PrinterStatus"); 
      PrintProps(printer, "Status"); 
      PrintProps(printer, "WorkOffline"); 
      PrintProps(printer, "Local"); 
     } 

    } 
相關問題