2008-11-03 46 views
20

Estoy buscando crear una impresora virtual que transfiera datos a mi aplicación .NET. Entonces quiero crear un instalador que instale tanto la impresora como la aplicación .NET. Sería realmente agradable poder escribirlo todo en C#, pero tengo la sensación de que esto requerirá que se escriba un controlador de impresora sin código administrado. ¿Alguien sabe de un tutorial bastante limpio o un ejemplo de cómo hacer esto?Escribiendo una impresora virtual en .NET

Respuesta

0

No se puede. El Windows driver model es nativo.

+3

Él no pueden qué exactamente? Escribe una "impresora virtual" Por supuesto que puede. Crea un instalador que instale una impresora virtual y una aplicación .NET. Por supuesto que puede. ¿Escribirlo todo en C#? Depende de tu definición de "todos" y "en C#". – bzlm

+1

sí, puede, todo lo que tiene que hacer es redirigir los datos que llegan al controlador de impresión falso o al controlador de impresora real SELECTED, a su aplicación. También se puede hacer usando C#. – Zerone

0

¿Por qué no considerar el uso de un enfoque alternativo. Como utilizar un programa de impresión intermedio ya preparado, como la aplicación de impresión a PDF disponible gratuitamente. Entonces, todo lo que necesita es decodificar PDF utilizando una biblioteca de terceros (que también tiene varianza libre y de código abierto) en lugar de romperse la cabeza para reinventar la rueda. Hay otra aplicación de impresión a XXX que también podría considerar dependiendo del formato que considere oportuno.

1

No me parece que interpretar el enfoque PDF sea bueno tampoco. No sé por qué quieres hacer lo que quieres hacer. Tal vez estés tratando de escribir una impresora PDF tuya.

Creo que realmente debería darle un vistazo al desarrollo de Windows Driver. Si desea desarrollar un controlador de impresora, creo que tendrá que hacerlo en C++.

Buena suerte.

5

Simplemente podría hacer que su aplicación se exponga como una impresora de tipo LPD o monitor de puerto 9100. Luego puede instalar cualquier controlador de impresión que desee, y apuntarlo a su aplicación.

+1

Buena idea. Pero ¿qué hay de analizar el "LPD data ", o lo que sea que pase por el puerto? – bzlm

+0

Típicamente 515, como la mayoría de las cosas, es definible por el usuario pero más a menudo no es eso. LPD es agradable ya que hay un pequeño encabezado que contiene información como cola de destino, etc. datos reales. Solo captura algunos datos y verás, es bastante simple. –

0

Si recuerdo bien Microsoft no admite .NET dentro del desarrollo del controlador de impresora. Todavía tengo que encontrarme con un controlador de impresora .NET puro. ¡Serás un hombre muy valiente para hacerlo! El sitio web "Printer Driver Resource Toolkit" no indica que el controlador se haya escrito en .NET

19

Visite http://www.printerplusplus.com. Es una impresora virtual .NET de código abierto. Le proporciona un instalador y una clase .NET para escribir código y procesar sus "datos de impresora".

1

hizo exactamente lo que están pidiendo utilizando el proyecto Github: Microsoft/Windows-driver-muestras/impresión/XPSDrvSmpl

https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl

Instalador: http://wixtoolset.org/

Aplicación: escuchar en el puerto interno

Flujo: instale la impresora y la aplicación desde un único instalador. El usuario imprime algo con su controlador y mientras la aplicación escucha el puerto interno. Cuando se envían datos, la aplicación los recoge. Esto es para XPS, se puede convertir a PDF, pero el flujo es similar sin importar lo que está imprimiendo.Si necesita algo más, consulte Microsoft/Windows-driver-samples/print/en GitHub u otras fuentes específicas para sus necesidades.

Actualización:

Una gran cantidad de preguntas acerca de cómo obtener el controlador de trabajo asi que aquí hay un ejemplo rápido:

de inicio mediante la descarga de Windows Driver Kit (WDK) si no lo tiene instalado ya. Al instalar, elija agregar la extensión para Visual Studio también en el paso final. En su instalación de Visual Studio 2017 necesita tener Desktop development with C++ para tener los SDK correctos. Si no lo tiene, vea la respuesta a continuación sobre cómo agregarlo.

How do I add features to Visual Studio 2017?

https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit

continuación, descargue el archivo de .zip-conductores-muestras de Windows principal:

https://github.com/Microsoft/Windows-driver-samples/archive/master.zip

Vaya a la carpeta abierta y <UnzipFolder>\print\XPSDrvSmplXPSDrvSmpl.sln en Visual Studio.

Luego siga la guía de Microsofts en GitHub. Como puede ver, es para Visual Studio 2015 pero creo que es el mismo para 2017 (aún no probado):

Para compilar una solución de controlador con Windows Driver Kit (WDK) 10 y Visual Studio 2015, realice lo siguiente pasos.

  1. Abrir el archivo de solución en Visual Studio 2015.
  2. Añadir todos los archivos no binarios (que normalmente se encuentra en el \ directorio de instalación de la muestra) al proyecto del paquete: a. En el Explorador de soluciones, , haga clic con el botón derecho en Archivos de controladores b. Seleccione Agregar, luego haga clic en Artículo existente c. Vaya a la ubicación a la que descargó la muestra, y seleccionar todos los archivos en el directorio de instalación, o el equivalente establecido de archivos no binarios tales como INF, INI, GPD, archivos PPD, etc. d. Haga clic en Agregar
  3. Configure estos archivos para agregarlos al paquete del controlador: a. En el Explorador de soluciones , haga clic con el botón derecho en la solución y seleccione Agregar> Nuevo proyecto . Elija el Paquete de instalación del controlador en Visual C++/Windows Driver/Package. segundo. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto Paquete y seleccione Propiedades. do. En el panel izquierdo, haga clic en Propiedades de configuración> Instalación del controlador> Archivos de paquete. re. En el panel derecho , utilice el botón de puntos suspensivos (...) para buscar el conjunto de archivos que necesita ser añadido al paquete de controladores. Todos los archivos de datos que agregó en el Paso 2-c, excepto el archivo INF, deben ser agregados. Esta configuración es por arquitectura, por lo que esta configuración debe repetirse para cada arquitectura que se construirá. mi. Haga clic en Aceptar.
  4. Abra el archivo INF y edítelo para que coincida con la salida construida. a. Abra el archivo INF. segundo. En la sección Versión, agregue una referencia a un archivo de catálogo como este: CatalogFile = XpsDrvSmpl.cat. do. En la sección SourceDisksFiles, cambie la ubicación de los archivos DLL que está construyendo, a = 1.Esto indica que no hay ningún directorio específico de arquitectura en este controlador. Si envía varias arquitecturas simultáneamente, deberá cotejar manualmente el controlador INF.

En este momento, Visual Studio 2015 podrá compilar un paquete de controladores y generar los archivos en el disco. Para configurar la firma e implementación de controladores, consulte Desarrollo, prueba e implementación de controladores.

https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl#build-the-sample

+0

¿Puedes decir algo más sobre cómo creaste tu propio controlador de impresora? ¿Qué tecnología escribiste el controlador y la aplicación (C++, C#, otro) – PawelD

+0

@Ogglas, ¿puedes compartir lo que hiciste? – jNewbie

+0

@jNewbie Ver respuesta actualizada – Ogglas

Cuestiones relacionadas