在标准的PrintDialog中,与所选打印机相关联的有四个值:状态、类型、位置和注释。
如果我知道打印机的名称,如何在C# 2.0中获取这些值?
在标准的PrintDialog中,与所选打印机相关联的有四个值:状态、类型、位置和注释。
如果我知道打印机的名称,如何在C# 2.0中获取这些值?
如dowski建议的那样,您可以使用WMI获取打印机属性。以下代码显示给定打印机名称的所有属性。其中您将找到:PrinterStatus、Comment、Location、DriverName、PortName等。
using System.Management;
...
string printerName = "YourPrinterName";
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName);
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
using (ManagementObjectCollection coll = searcher.Get())
{
try
{
foreach (ManagementObject printer in coll)
{
foreach (PropertyData property in printer.Properties)
{
Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));
}
}
}
catch (ManagementException ex)
{
Console.WriteLine(ex.Message);
}
}
这个应该可以工作。
using System.Drawing.Printing;
...
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "The printer name"; // Load the appropriate printer's setting
之后,可以读取PrinterSettings的各种属性。
请注意,ps.isValid()
可以查看打印机是否实际存在。
编辑:另外一条注释。Microsoft建议您使用PrintDocument并修改其PrinterSettings,而不是直接创建PrinterSettings。
string[] arrExtendedPrinterStatus = {
"","Other", "Unknown", "Idle", "Printing", "Warming Up",
"Stopped Printing", "Offline", "Paused", "Error", "Busy",
"Not Available", "Waiting", "Processing", "Initialization",
"Power Save", "Pending Deletion", "I/O Active", "Manual Feed"
};
string[] arrErrorState = {
"Unknown", "Other", "No Error", "Low Paper", "No Paper", "Low Toner",
"No Toner", "Door Open", "Jammed", "Offline", "Service Requested",
"Output Bin Full"
};
var queue = new LocalPrintServer().GetPrintQueue("Printer Name");
var queueStatus = queue.QueueStatus;
var jobStatus = queue.GetPrintJobInfoCollection().FirstOrDefault().JobStatus
IsDefaultPrinter
“获取一个值,该值指示PrinterName属性是否指定默认打印机,除非用户明确设置了PrinterName。” - koraljko