【问题标题】:how do i check if a printer is installed and ready using C#?如何使用 C# 检查打印机是否已安装并准备就绪?
【发布时间】:2010-12-10 00:33:33
【问题描述】:

如何使用 .NET 3.5 和 Visual Studio 2008 在 C# 中以编程方式检查是否安装了打印机(如果有,我如何检查它是否已打开并准备好使用?)?

提前致谢,

【问题讨论】:

    标签: c# winforms visual-studio-2008 printing


    【解决方案1】:

    这个 sn-p 将检索有关已安装打印机的信息:

    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;
    
        }
    

    这是另一个显示更多属性的 sn-p:

        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");
            }
    
        }
    

    【讨论】:

    • 所有打印机的可用性为空
    • @daniel:这不是一个有用的评论。
    猜你喜欢
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多