/// <summary> /// Busca os dados de uma impressora lógica no sistema operacional. Caso duas ou mais /// impressoras possuam o mesmo nome a última encontrada é a que será retornada /// </summary> public static SysPrinter LocateSystemPrinter(String printerName) { SysPrinter sysPrinter = null; ManagementObjectSearcher printerSearcher; printerSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_Printer WHERE Name ='" + printerName + "'"); ManagementObjectCollection printers = printerSearcher.Get(); foreach (ManagementObject printer in printers) { sysPrinter = new SysPrinter(); sysPrinter.Name = (String)printer["Name"]; sysPrinter.Port = (String)printer["PortName"]; sysPrinter.IsDefaultPrinter = (Boolean)printer["Default"]; sysPrinter.SpoolEnabled = (Boolean)printer["SpoolEnabled"]; sysPrinter.IsQueued = (Boolean)printer["Queued"]; sysPrinter.DoCompleteFirst = (Boolean)printer["DoCompleteFirst"]; sysPrinter.KeepPrintedJobs = (Boolean)printer["KeepPrintedJobs"]; sysPrinter.ComputerName = (String)printer["SystemName"]; sysPrinter.Capabilities = (PrinterCapabilityEnum[])printer["Capabilities"]; } return(sysPrinter); }
/// <summary> /// Verifica se a impressora imprime em cores /// </summary> public static Boolean IsColorPrinter(String printerName) { Boolean isColorPrinter = false; SysPrinter printer = LocateSystemPrinter(printerName); foreach (PrinterCapabilityEnum capability in printer.Capabilities) { if (capability == PrinterCapabilityEnum.ColorPrinting) { isColorPrinter = true; } } return(isColorPrinter); }
/// <summary> /// Mapeia as impressoras lógicas disponíveis para utilização no sistema de accounting /// Apenas impressoras associadas a um hardware e com spool habilitado, o parâmetro /// machineName pode ser fornecido para filtrar impressoras instaladas no computador /// com esse nome (ou null para considarar também impressoras compartilhadas por outros /// computadores) /// </summary> public static List <SysPrinter> MapSystemPrinters(String machineName) { // Lista as impressoras lógicas (incluídas no Sistema Operacional através de // "adicionar impressora"), as impressoras físicas podem ser localizadas através // de mensagens SNMP quando estão ligadas e escutando a porta 161 List <SysPrinter> sysPrinters = new List <SysPrinter>(); Dictionary <String, PrinterPort> portDic = MapPrinterPorts(); ManagementObjectCollection printers = GetServerPrinters(); foreach (ManagementObject printer in printers) { // Verifica se a impressora está associada a um dispositivo físico (hardware) Boolean hasPhysicalDevice = IsNetworkAttached(printer, portDic) || (Boolean)printer["EnableBIDI"]; // Verifica se a impressora está fazendo "spool" dos documentos Boolean spoolEnabled = (Boolean)printer["SpoolEnabled"]; // Verifica se a impressora é do computador ou se é uma impressora compartilhada por outros Boolean machineMatches = true; if (!String.IsNullOrEmpty(machineName)) { String computerName = (String)printer["SystemName"]; machineMatches = (machineName == computerName); } if (hasPhysicalDevice && spoolEnabled && machineMatches) { SysPrinter sysPrinter = new SysPrinter(); sysPrinter.Name = (String)printer["Name"]; sysPrinter.Port = (String)printer["PortName"]; sysPrinter.IsDefaultPrinter = (Boolean)printer["Default"]; sysPrinter.SpoolEnabled = (Boolean)printer["SpoolEnabled"]; sysPrinter.IsQueued = (Boolean)printer["Queued"]; sysPrinter.DoCompleteFirst = (Boolean)printer["DoCompleteFirst"]; sysPrinter.KeepPrintedJobs = (Boolean)printer["KeepPrintedJobs"]; sysPrinter.ComputerName = (String)printer["SystemName"]; sysPrinter.Capabilities = (PrinterCapabilityEnum[])printer["Capabilities"]; sysPrinter.EnableBIDI = (Boolean)printer["EnableBIDI"]; sysPrinters.Add(sysPrinter); } } return(sysPrinters); }