我已将Windows环境从8更新到10,并发现未返回默认打印机,而是返回另一台打印机。
我已关闭“让Windows管理我的默认打印机”设置,但仍未获得默认打印机。
我有以下代码:
private void testPrinter() {
PrintService[] array = PrintServiceLookup.lookupPrintServices(null, null);
for(PrintService ps : array){
System.out.println(ps.getName());
}
}
在此测试中,我获得了以下打印机列表:
发送至一个便笺
Microsoft XPS文档编写器
HP打印机
Epson Printer(在Windows中设置为我的默认打印机)
但是,在以下测试中:
PrintService ps = PrintServiceLookup.lookupDefaultPrintService();
System.out.println(ps.getName());
我得到惠普打印机,这不是我的默认打印机!无论我选择哪台打印机作为默认打印机,都会始终返回HP打印机
我查看了用于lookupDefaultPrintService方法的java API,并说明了以下内容:
找到此环境的默认打印服务。这可能 返回null。如果多个查找服务都指定了默认值,则 选择的服务没有精确定义,而是一个原生的平台 服务,而不是已安装的服务,通常作为 默认。如果没有明确可识别的平台本机默认值 打印服务,默认是第一个位于 依赖于实现的方式。
这可能包括使用任何可用的首选项API 作为Java或本机平台的一部分。这个算法可能是 由用户设置属性javax.print.defaultPrinter覆盖。 必须发现指定的服务有效且当前 可以作为默认值返回。
在Windows 8中,返回默认打印机没有问题。更新后我遇到了这个问题。我该如何解决这个问题?
答案 0 :(得分:2)
正如本guide所指出的,Windows 10每次打印时都会重新配置默认打印机,将默认值设置为上次使用的设备。您必须更改此设置。
编辑:您还可以尝试通过注册表(regedit.exe)直接禁用该功能,搜索所有LegacyDefaultPrinterMode DWORD
实例并将其设置为1(关闭)。通常主要实例在这里:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows