Windows 中有没有一种方法(在 Windows CE 中工作)来检查打印机是否已连接并与 C++ 中的 LPT1 进行通信?
[Edit]更多信息:
我们目前正在使用通用 Windows CE 打印机驱动程序 -pcl.dll
- 通过将其传递到CreateDC
,获取打印机的 DC。
我们不能打电话PrintDlg() http://msdn.microsoft.com/en-us/library/ms646940%28VS.85%29.aspx显示打印对话框,因为它是“看起来太复杂了”但我们也不能用PD_RETURNDEFAULT http://msdn.microsoft.com/en-us/library/ms646843%28VS.85%29.aspx因为我们不想使用默认打印机。所以,我们手动设置一个DEVMODE http://msdn.microsoft.com/en-us/library/dd183565%28VS.85%29.aspx要传递到的结构CreateDC
.
获得 DC 后,我们调用GetDeviceCaps()
获取打印机的信息(例如页宽等),然后StartPage()
/EndPage()
/ExtTextOut()
打印。
但是,如果没有连接打印机,程序会冻结大约一分钟,然后再给出“中止/重试/失败?”对话框(我不知道这个过程中的哪一点被冻结)。当您尝试打印时,其他软件不会冻结,因此must是防止这种情况的一种方法...
当您在 Windows 中使用打印机时,您实际上永远不会直接使用端口,而是通过打印机驱动程序界面。这消除了如何通信的知识,并为您提供了一个对于所有打印机(无论品牌和端口如何)都相同的工具箱。
Windows API 为您提供了多种从驱动程序中提取额外信息的可能性。在我 14 年的打印机开发生涯中,微软从未添加过对丰富打印机状态的支持(尽管我不知道他们在 Windows 7 中是否改变了这一点)。我们和许多其他打印机开发人员一样必须扩展打印机驱动程序以向应用程序提供更多信息。
您应该询问您的打印机开发人员是否有 Windows CE 驱动程序。我不确定插入/拔出并行打印机时是否会生成 DEVICE_CHANGE 消息。它适用于 USB 打印机(无需在注册表中搞乱)。
您可以阅读有关打印子系统的更多信息here http://msdn.microsoft.com/en-us/library/ff686805(v=VS.85).aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)