Red de conocimiento informático - Material del sitio web - ¿Cómo enviar un archivo a una impresora de red e imprimirlo (usando C#)?

¿Cómo enviar un archivo a una impresora de red e imprimirlo (usando C#)?

Problema

.Net Framework 1.1 nos proporciona una clase PrinterSettings para proporcionar información que especifica cómo se imprime el documento, incluida la impresora en la que se imprime el documento. La propiedad estática InstalledPrinters nos permite obtener los nombres de todas las impresoras instaladas en el ordenador.

Desafortunadamente, esta propiedad solo proporciona el nombre de la impresora instalada. No hay nada que pueda hacer para obtener información relevante sobre la impresora (como el tipo de impresora, etc.). Surge un problema dado que los clientes no pueden proporcionar SDK de impresora, la detección de impresoras (para fines comerciales, los clientes requieren que el software solo pueda imprimir cuando usan sus impresoras) solo se puede lograr mediante la identificación del controlador de impresora.

------------------------------------------- ----- ---

Solución 1: use WMI para obtener información de la impresora

WMI, el nombre completo es Windows Management Instrumentation. Es una estructura de gestión de sistemas escalable que utiliza una interfaz unificada, basada en estándares y extensible orientada a objetos. WMI le proporciona una forma estándar de interactuar con la información de administración del sistema y la API WMI subyacente. WMI es utilizado principalmente por desarrolladores y administradores de aplicaciones de administración de sistemas para acceder a la información de administración del sistema operativo.

La clase System.Management en .Net Framework proporciona soporte para WMI, en el que ManagementObjectSearcher se utiliza para recuperar una colección de objetos ManagementObject o ManagementClass en función de una consulta o enumeración especificada.

/**//// lt; resumengt;

/// Código 1: ejemplo de búsqueda WMI

/// resumengt;

/// Código 1: ejemplo de búsqueda WMI

/// lt; resumengt;

/// p>

/// lt;nombre del parámetro ="strDrivername"gt;Nombre del controladorlt;/paramgt;

/// lt;returnsgt;Devuelve la lista de impresoras encontradaslt;/returnsgt;

/// lt;remarksgt; strDrivername admite consultas con comodines "" y "_", similares a las consultas en declaraciones SQLlt;remarksgt;

public StringCollection GetPrintsWithDrivername( string strDrivername)

{

StringCollection scPrinters = new StringCollection();

string strcheck = "";

if( strDrivername !="" amp ;amp; strDrivername != "*" )

strcheck = " donde DriverName like \'" strDrivername "\'";

string searchQuery = "SELECCIONAR Nombre DE Win32_Printer" strcheck

ManagementObjectSearcher searchPrinters =

new ManagementObjectSearcher(searchQuery);

ManagementObjectCollection PrinterCollection = searchPrinters.Get();

foreach(ManagementObject impresora en PrinterCollection)

{

cadena nombre de impresión = impresora.Properties["Nombre"].Value.ToString();

scPrinters.Add(nombre de impresión

}

searchPrinters.Dispose();

PrinterCollection.Dispose();

return scPrinters

}

El problema parece ser básicamente. resuelto, y la lista de impresoras correcta se obtiene ejecutando el programa. Sin embargo, después de usarlo durante un período de tiempo, el usuario descubrió que a veces la impresora no se podía obtener correctamente. Parece que efectivamente hay algún problema con la estabilidad de DOTNET llamando a WMI. . . . . .

WMI en sí es bastante potente y VBS básicamente puede cubrir las operaciones más básicas de WINDOWS. Para obtener más información, consulte la documentación de MSDN.

s!D8E832CE4545AF!158.entry

Suplemento: en 2.0, la palabra clave fija se puede usar para definir un caché de matriz de tamaño fijo, en lugar de como en 1.x Un valor numérico Es necesario definir el tamaño.

Pero este método solo se puede utilizar para la estructura (struct) y no para la definición de clase (class).