我想用 C++ 或 C# 编写一个应用程序,它在安装时将充当打印机驱动程序。它将在“打印”对话框的下拉列表中可用,但不会打印,而是会调用我的代码。
我认为可能有一些 Windows 提供的接口来编写打印机驱动程序。
Windows 提供了大量的接口。你知道你想写什么样的打印机驱动程序吗?目前,Windows 支持三种类型的打印机驱动程序——PostScript、Unidrv 和 XPSDrv(后者仅在带有 EP 1.0 及更高版本的 XP/2003 Server 上)。大多数时候,编写一个驱动插件就足够了。阅读 INF 架构以了解这些东西已安装,特别是有关微型驱动程序的部分。
如建议的那样,您将需要 WDK 才能构建驱动程序或其插件。请注意,驱动程序不使用 Visual Studio IDE 或编译器。WDK 带有自己的编译器。您总是可以将后者与 VS 联系起来,但那是另一回事。
WDK 具有针对不同操作系统的设置。您将必须知道要解决哪个操作系统(或一组操作系统)并选择适当的设置。
我想编写一个简单的驱动程序,它将显示在打印机列表中。
我不明白这会有什么帮助。如果您正在编写驱动程序,为什么需要系统上所有其他驱动程序的列表?
打印到此驱动程序将调用我的代码,以便我可以执行诸如创建文档的 PDF、调用 Web 服务等操作。
有趣的!您可以在 UI 插件中实现所有这些功能。UI 插件是在您选择Advanced
驱动程序属性时加载的 dll。
要开始使用 UI 插件,请查看oemui
WDK 中的示例源代码。
您所问的内容在 Windows 中不可用。您可以使用 PostScript、UniDrv、XPSDrv 驱动程序开发自己的打印机驱动程序。当驱动程序作为添加打印机的一部分安装时,它将使用驱动程序创建打印队列。发现和设备安装是另一个主题。当从您的应用程序提交打印作业时,Windows 打印系统将调用此驱动程序。Windows 打印系统由打印后台处理程序、打印处理器、端口监视器、语言监视器组成。当您的应用调用 Win32 或 .NET 打印 API 时,它们将调用通用打印对话框或现代打印对话框组件来显示列出打印机的打印对话框界面。当您提交打印作业时,spooler 会生成 XPS 格式的假脱机数据并将其发送到您的驱动程序。
我不确定它是否会显示在列表中,但我从未尝试过此 C++ 代码:
#include <fstream>
Namespace Drivers{
Class Printer{
Const IOStream Printer("PRN");
Void Send(char a[]){
Printer<<a;}
Char GetStatus[](){
Char a[];
Printer>>a;
return a;
};
}