我在本机C ++ / Win32 / MFC对话框应用程序中使用MS Web Browser ActiveX控件来通过HTML呈现一些信息。
我想在没有任何用户交互的情况下将内容打印到指定的打印机(这不是默认打印机)。我想使用的打印机是PDF打印机。
我正在使用Code Project中一个很好的包装器类,这使得使用Web浏览器控件变得更容易(http://www.codeproject.com/Articles/3919/Using-the-WebBrowser-control-simplified),并且包装器提供的一个东西就是打印。它提供了一种打印方法,它使用ExecWB(OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER,...)来启动内容的打印。
这很有效,导致控件的内容在没有任何用户交互的情况下打印到默认打印机。
挑战是让它使用与默认打印机不同的打印机。我最初的尝试是调用:: SetDefaultPrinter(http://msdn.microsoft.com/en-us/library/windows/desktop/dd162971(v=vs.85).aspx)。这似乎不起作用。看来,尽管调用:: SetDefaultPrinter,Web浏览器ActiveX控件仍然打印到系统默认打印机。它好像忽略了这个召唤所做的一切。
我尝试按照MSDN链接中的建议广播系统设置更改消息,并直接将其发送到浏览器窗口,但没有任何运气。
我有什么想法可以让网页浏览器activex控件打印我指定的打印机而不是使用默认打印机?
答案 0 :(得分:1)
我所做的 所有步骤都是在IE注册表中设置打印机,在这里:
HKCU\Software\Microsoft\Internet Explorer\PageSetup\printer="the required printer name"
打印后恢复所有内容
答案 1 :(得分:1)
我得到了它的工作。问题的原因不是浏览器控件打印到错误的打印机,而是异步执行打印操作(通过ExecWB)。因此,我将默认打印机设置为PDF打印机,然后启动打印,然后恢复原始默认打印机。这种情况很快发生,当异步打印操作准备就绪时,原始默认打印机再次被设置为默认打印机,因此它转到了该打印机。
解决方案是将默认打印机设置为PDF打印机,启动打印,然后等待打印完成回调。收到回调后,它会恢复原始默认打印机。
如果您正在使用Gary Wheeler对Code Project的优秀Web浏览器控件(请参阅here),它很容易获得打印完成的回调,您只需覆盖虚拟的OnPrintTemplateTeardown()方法。