public static bool GetPrinterInfo(ref PrinterInfo printerInfo) { printerInfo.Status = Status.None; string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerInfo.Caption); var searcher = new ManagementObjectSearcher(query); var coll = searcher.Get(); foreach (ManagementObject printer in coll) { var ps = new PrinterSettings {PrinterName = printerInfo.Caption}; if (ps.IsValid) { printerInfo.Status = Status.OK; printerInfo.Port = printer.Properties["PortName"].Value.ToString(); printerInfo.Driver = printer.Properties["DeviceID"].Value.ToString(); printerInfo.Color = ps.SupportsColor; printerInfo.Name = printer.Properties["DeviceID"].Value.ToString(); printerInfo.Network = Convert.ToBoolean(printer.Properties["Network"].Value); } else { printerInfo.Status = Status.Error; } } return true; }
private void SetPrinterDriver(SettingsPrinter printer) { var info = new PrinterInfo(); info.Caption = printer.Caption; if (PrinterHelper.GetPrinterInfo(ref info)) { printer.Name = info.Name; printer.Port = info.Port; } var manf = info.Name.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries)[0]; var pluginName = _pluginsManager.LoadedPlugins[0].Name; foreach (var loadedPlugin in _pluginsManager.LoadedPlugins) { if (loadedPlugin.Brand.ToLower().Contains(manf.ToLower())) { pluginName = loadedPlugin.Name; var ports = loadedPlugin.Port.Split(','); var foundMatch = false; foreach (var port in ports) { if (port.Trim().ToLower().Contains(info.Port.Substring(0, port.Trim().Length).ToLower()) || port.Trim() == "*" || (port.Trim().ToLower() == "network" && info.Network)) { foundMatch = true; break; } } if (foundMatch) break; } } printer.Plugin = pluginName; }