.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 驱动程序示例主文件:

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

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

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

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

  1. 在 Visual Studio 2015 中打开解决方案文件。
  2. 添加所有非二进制文件(通常位于\install 目录中 示例)到包项目:在解决方案资源管理器中, 右键单击驱动程序文件 b。选择添加,然后单击现有项目 c。 导航到您下载示例的位置,然后 选择安装目录或等效集合中的所有文件 非二进制文件,例如 INF、INI、GPD、PPD 文件等 d. 点击添加
  3. 配置要添加到驱动程序包中的这些文件: a.在里面 解决方案资源管理器,右键单击解决方案并选择添加 > 新建 项目。在Visual C++/Windows下选择Driver Install Package 驱动程序/包。 b.在解决方案资源管理器中,右键单击包 项目并选择属性。 C。在左 Pane 中,单击 配置属性 > 驱动程序安装 > 包文件。 d.在里面 右 Pane 中,使用省略号按钮 (...) 浏览到 驱动包中需要添加的文件。所有数据 您在步骤 2-c 中添加的文件(INF 文件除外)应该是 添加。这个配置是针对每个架构的,所以这个配置 必须对将要构建的每个体系结构重复。 e.点击 好的。
  4. 打开 INF 文件并编辑它以匹配构建的输出。一种。打开 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/29538232/

相关文章:

php - 以编程方式将 Woocommerce 购物车项目从虚拟更改为物理

printing - 将原始数据发送到 FedEx 标签打印机

c# - 如何在多页中打印一张大图像?

c# - 我可以使用 Visual Studio C# 类库项目引用 Blazor 项目

.net - 不使用数据库但在内存对象中使用是不是很糟糕?

.net - 当属性已声明为父级的属性时,使用 XPath 匹配名称格式为 ParentElement.Property 的元素

c++ - 在 header 中实现的隐式内联虚函数

.net - 用于 WPF 的 Windows Phone 7 Pivot 控件?

c++ - 我可以用纯虚拟函数覆盖虚拟函数吗?

c++ - 如何使用“打印到 PDF”打印机以编程方式打印 MFC 和 CView 中的文件名而不提示输入文件名?