【问题标题】:Can I programmatically use the OneNote printer driver?我可以以编程方式使用 OneNote 打印机驱动程序吗?
【发布时间】:2013-05-10 22:01:56
【问题描述】:

我有一个处理打印请求的系统服务,并给定用户的打印机名称,然后将 DC 连接到该打印机。它开始一个文档,结束它,然后分离。

m_PrinterDC.CreateDC (L"WINSPOOL", _printerName.c_str(), NULL, NULL)
m_DC.Attach(m_hprinter)
m_DC.StartDoc(...)
...
mDc.TextOut(...)
...
m_DC.EndDoc()
m_DC.Detatch()

这适用于普通打印机,但在使用“打印到 OneNote”功能(驱动程序名称“发送到 OneNote 2010”)时,它似乎不起作用。我想避免仅针对此功能的自定义逻辑;理想情况下,所有打印机都可以正常工作。有什么想法可能会出错吗?我已尝试更新打印机安全设置,以包括所有人的打印权限;不知道还能尝试什么。

【问题讨论】:

  • “它似乎不起作用” - 请更准确。哪个调用失败?您确实检查了返回值,对吗?
  • 没有对话框出现'将文档发送到打印机'等。所有调用都没有失败,所有返回预期值(不是每个调用都被检查,但所有设置拆卸都是)。这些函数中的每一个实际上都被称为:if(m_DC.EndDoc() < 0) LOG(L"Failed to end document printing");,但没有出现错误。

标签: c++ printing mfc


【解决方案1】:

不幸的是,我不得不猜测一些点,因为您似乎避免详细描述错误情况。

首先,如果你检查所有返回值都是成功的,那可能是onenote本身的问题。通过使用其他程序打印来检查 onenote 的状态。

其次,您检查 _printerName 是否准确?如果部分用户使用其他语言操作系统,驱动程序名称“Send To OneNote 2010”会有所不同或取决于版本。当然,如果您检查函数调用的所有返回值,它会记录在您的日志文件中。但是,我担心您使用“EnumPrinters”使用了确切的打印机名称。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd162931(v=vs.85).aspx

我希望这对你有一点帮助。

【讨论】:

  • 打印机名称是使用 GetDefaultPrinter 解析的,无论它返回什么都是我正在使用的(从非服务应用程序调用,传递给服务);我没有更多细节的原因是,我真的不知道除了用服务代码编写完整的最小示例之外还有什么相关的。当不作为服务运行时,我可以使用 CPrintDialog::GetDefaults() 函数打印到 OneNote,但 SYSTEM 用户没有默认打印机,并且模拟没有纠正它。
猜你喜欢
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2010-09-14
  • 2015-08-17
相关资源
最近更新 更多