【问题标题】:Printing in windows forms在 Windows 窗体中打印
【发布时间】:2014-05-24 07:35:06
【问题描述】:

我有一个 Windows 窗体应用程序,我正在尝试打印一些东西,但如果没有实际的打印机(不是 xps 或其他东西),我想显示一个消息框,指示没有实际的打印机。所以简而言之,我希望他们打印当前计算机中是否有默认打印机设置为默认打印机,这会导致我检查默认打印机是否真实。

【问题讨论】:

标签: c# winforms printing


【解决方案1】:

您可以使用 System.Management 执行此操作。使用以下类来解决您的问题:

public class MyClass
{

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

    [STAThread]
    static void Main(string[] args)
    {
        ManagementObjectSearcher searcher = new
        ManagementObjectSearcher("SELECT * FROM Win32_Printer where Default=True");

        string printerName = "";
        foreach (ManagementObject printer in searcher.Get())
        {
            printerName = printer["Name"].ToString().ToLower();
            Console.WriteLine("Printer :" + printerName);
            printProps(printer, "WorkOffline");
            //Console.WriteLine();
            switch (Int32.Parse(printer["PrinterStatus"].ToString()))
            {
                case 1: Console.WriteLine("Other"); break;
                case 2: Console.WriteLine("Unknown"); break;
                case 3: Console.WriteLine("Idle"); break;
                case 4: Console.WriteLine("Printing"); break;
                case 5: Console.WriteLine("Warmup"); break;
                case 6: Console.WriteLine("Stopped printing"); break;
                case 7: Console.WriteLine("Offline"); break;
            }
        }
    }
}

【讨论】:

  • 是的,我去过那里,但问题是他使用自己的打印机名称,他知道打印机。就我而言,我们不知道打印机的名称。
  • 使用 WMI 是可行的方法,但我认为您无法判断它是否是“真正的打印机”。打印机驱动程序就是这样,一个输出流。它不知道在硬件级别上连接了什么设备。您必须排除所有“非真实”设备,因为您认为它们是,或者按名称将所有“真实”设备列入白名单。尽管您可以根据为该打印机返回的 WMI 属性中定义的 PortName 排除一些可能性。 stackoverflow.com/questions/296182/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多