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
Creo que tendrá que hacer mucho de embalaje de WinAPI. Comience a buscar en Windows Driver Development Kit para encontrar las cosas que tiene que hacer.
también me encontré con este comercial Printer Driver Resource Toolkit para .NET ...
No se puede. El Windows driver model es nativo.
¿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.
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.
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.
Buena idea. Pero ¿qué hay de analizar el "LPD data ", o lo que sea que pase por el puerto? – bzlm
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. –
estaba buscando una respuesta para la pregunta similares, y encontramos este enlace a través de Wikipedia - http://www.colorpilot.com/emfprinterpilot.html (permite crear impresoras virtuales en diferentes idiomas)
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
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".
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\XPSDrvSmpl
XPSDrvSmpl.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.
- Abrir el archivo de solución en Visual Studio 2015.
- 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
- 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.
- 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
- 1. ¿Cómo crear una impresora virtual en Windows?
- 2. ¿Cómo puedo instalar una impresora usando .NET?
- 3. Escribiendo un controlador de impresora de Windows
- 4. Cómo simular una impresora en .NET?
- 5. Mercurial, escribiendo ganchos mediante una API .NET
- 6. de Configuración de la impresora en .NET
- 7. Hablando con una impresora
- 8. En .NET ¿una clase puede tener constructor virtual?
- 9. ¿Cómo obtener información de la impresora en .NET?
- 10. Cruise Control Expresión .Net escribiendo msbuild-results.xml
- 11. ¿Existe la posibilidad de diferenciar la impresora virtual de la física?
- 12. Imprimir en una impresora cliente desde una aplicación web
- 13. Escribiendo html en una cadena
- 14. imprimiendo en una impresora AirPrint de Android
- 15. Imprimir en una impresora estándar de Python?
- 16. Cómo imprimir cualquier documento en una impresora SELECCIONADA
- 17. Impresora de recibos?
- 18. Imprimir en una impresora USB con Python en una Mac
- 19. ¿Cómo puedo saber si una impresora imprimirá en un archivo?
- 20. función virtual declarada no virtual en una clase derivada
- 21. Implementación de un sistema de archivos virtual en .NET
- 22. Escribiendo al registro en una aplicación C#
- 23. Escribiendo un archivo en una tarjeta SD
- 24. Escribiendo una función VLOOKUP en vba
- 25. Escribiendo una expresión regular en Latex
- 26. ¿Escribiendo un compilador para .net - IL o Bytecode?
- 27. Cómo crear una unidad de Windows virtual
- 28. Cómo escribir una impresora bonita personalizada
- 29. Verificación de si hay una impresora conectada
- 30. ¿Puedo obtener el icono asociado a una impresora instalada a través de .Net?
É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
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