我有一个使用旧报告库(ReportPro)的应用程序。在Windows 7 64上,有时无法找到默认打印机。我做了一些挖掘,并在Windows注册表中找到了问题。 ReportPro通过GetProfileString windows API确定可用的打印机。它从这里获得可用打印机的列表:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices
从此处获取默认打印机:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device
我在Windows注册表中看到的是打印机列表将显示我们正在使用的名称和网络端口:
HP LaserJet 5200 Series PCL 5 on Ne03:
Microsoft XPS Document Writer on Ne01:
HP Officejet Pro K8600 Series on Ne02:
Phaser 8860-2 PS on Ne00:
CutePDF Writer on CPW2:
在某些系统上,默认打印机字符串的值不同。它会是这样的:
Ne01上的HP LaserJet 5200系列PCL 5 :
特别是NExx编号与打印机列表相比默认打印机值不同。
报告包无法找到默认打印机,因为它在比较中使用了打印机名称和NExx编号。
为什么NExx值会有所不同?如何确保值“坚持”?我目前发现的解决方案是将其他打印机设置为默认值,然后选择正确的默认打印机。这似乎暂时解决了这个问题,但并不是永久性的。
这个问题似乎只是Win7。在过去的8年里,有几台XP机器从未遇到过这个问题。
答案 0 :(得分:2)
检索默认打印机的推荐方法是使用Windows API GetDefaultPrinter() API而不是读取注册表。检索所有打印机列表的推荐方法是使用EnumPrinters()。如果您修改代码以使用Windows API而不是直接读取注册表,则它应该在Windows 7上可靠地运行。