.net - 在 .NET 中编写虚拟打印机

标签 .net virtual printing

我希望创建一个虚拟打印机,将数据传递到我的 .NET 应用程序。然后我想创建一个安装程序来安装打印机和 .NET 应用程序。如果能够用 C# 编写所有内容,那就太好了,但我有一种感觉,这将需要编写非托管代码的打印机驱动程序。有谁知道如何执行此操作的相当干净的教程或示例?

最佳答案

使用 Github 项目完全按照您的要求进行操作:Microsoft/Windows-driver-samples/print/XPSDrvSmpl

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

安装程序:http://wixtoolset.org/

应用程序:监听内部端口

流程:从单个安装程序安装打印机和应用程序。当应用程序监听内部端口时,用户使用您的驱动程序打印一些内容。当数据发送时,应用程序会接收它。这是针对 XPS 的,可以转换为 PDF,但无论打印什么内容,流程都是相似的。如果您需要任何其他内容,请查看 GitHub 上的 Microsoft/Windows-driver-samples/print/或特定于您的需求的其他来源。

更新:

关于如何让驱动程序工作有很多问题,这里是一个简单的例子:

如果您尚未安装 Windows 驱动程序工具包 (WDK),请先下载它。安装时选择在最后一步添加 Visual Studio 扩展。在您的 Visual Studio 2017 安装中,您需要有 Desktop development with C++拥有正确的 SDK。如果您没有它,请参阅下面的答案,了解如何添加它。

How do I add features to Visual Studio 2017?

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

然后下载.zip Windows-driver-samples master 文件:

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

导航到文件夹<UnzipFolder>\print\XPSDrvSmpl并打开XPSDrvSmpl.sln在 Visual Studio 中。

然后按照 GitHub 上的 Microsoft 自己的指南进行操作。正如您所看到的,它适用于 Visual Studio 2015,但我认为它适用于 2017 年(尚未测试):

要使用 Windows 驱动程序工具包 (WDK) 10 和 Visual Studio 2015 构建驱动程序解决方案,请执行以下步骤。

  1. 在 Visual Studio 2015 中打开解决方案文件。
  2. 添加所有非二进制文件(通常位于\install 目录中 示例)到 Package 项目:在解决方案资源管理器中, 右键单击驱动程序文件 b.选择添加,然后单击现有项目 c. 导航到您下载示例的位置,然后 选择安装目录中的所有文件或等效集 非二进制文件,例如 INF、INI、GPD、PPD 文件等。 单击“添加”
  3. 配置要添加到驱动程序包中的这些文件:在里面 解决方案资源管理器,右键单击解决方案并选择“添加”>“新建” 项目。 Visual C++/Windows下选择驱动安装包 驱动程序/包。 b.在解决方案资源管理器中,右键单击包 项目并选择属性。 C。在左侧 Pane 中,单击 配置属性 > 驱动程序安装 > 包文件。 d.在里面 在右 Pane 中,使用省略号按钮 (...) 浏览到一组 需要添加到驱动包中的文件。所有数据 您在步骤 2-c 中添加的文件(INF 文件除外)应为 添加。此配置是针对每个架构的,因此此配置 必须对将要构建的每个架构重复此操作。 e.点击 好的。
  4. 打开 INF 文件并对其进行编辑以匹配构建的输出。 A。打开 INF 文件。 b.在版本部分中,添加对目录的引用 像这样的文件:CatalogFile=XpsDrvSmpl.cat。 C。在里面 SourceDisksFiles 部分,更改您的 DLL 文件的位置 正在 build ,=1。这表明没有架构 该驱动程序中的特定目录。如果您运送多件 同时架构,您将需要整理驱动程序 手动INF。

此时,Visual Studio 2015 将能够构建驱动程序包并将文件输出到磁盘。要配置驱动程序签名和部署,请参阅开发、测试和部署驱动程序。

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

关于.net - 在 .NET 中编写虚拟打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/257768/

相关文章:

java - 打印(获取打印输出)数组列表中的元素

c# - 串行端口返回无效数据

c# - 纯 C# 编码的交易

c# - 在公开 Begin/End 方法的类中实现 IDisposable

windows - 适用于 Windows 的虚拟 USB 设备?

WPF - 打印视觉效果时的分页

c# - 如何在 C# Windows 应用商店应用程序(也称为 WinRT/Metro)中创建查询字符串?

c# - 你会不会有太多 "protected virtual"方法?

C++继承纯虚函数

ios - UIPrintInteractionController (Swift) 最多可以执行多少次打印?