如何检查是否有默认打印机(Windows)?

如何检查是否有默认打印机(Windows)?,第1张

概述如何检查是否有默认打印机(Windows)?

有没有一个API或registry键,我可以使用从应用程序(本机,Java或.Net)来检查当前login的用户是否configuration了默认打印机?

更新:非常感谢迄今为止的答案! 根据知识库文章http://support.microsoft.com/kb/156212 ,registry项(读/写)仅logging到windows 2000.是否有更新版本的本机访问Win API方法?

列出并连接到蓝牙设备

如何获取已安装的第三方更新信息?

使用SMTP作为IP地址发送邮件时,无法parsing远程名称

移动位置并更改外部程序的大小

C# – 捕获windows应用程序输出

在.NET中,这个代码适用于我:

public static string DefaultPrintername() { string functionReturnValue = null; System.Drawing.Printing.PrinterSettings oPS = new System.Drawing.Printing.PrinterSettings(); try { functionReturnValue = oPS.Printername; } catch (System.Exception ex) { functionReturnValue = ""; } finally { oPS = null; } return functionReturnValue; }

来自: http : //in.answers.yahoo.com/question/index?qID=20070920032312AAsSaPx

非托管打印后台处理程序API winspool.drv有一个函数。 您可以调用GetDefaultPrinter函数以返回默认打印机的名称。

这是非托管函数的P / Invoke签名:

[Dllimport("winspool.drv",CharSet=CharSet.auto,SetLastError=true)] private static extern bool GetDefaultPrinter( StringBuilder buffer,ref int bufferSize);

使用此功能可确定是否设置了默认打印机:

public static bool IsDefaultPrinterassigned() { //initialise size at 0,used to determine size of the buffer int size = 0; //for first call provIDe a null StringBuilder and 0 size to determine buffer size //return value will be false,as the call actually fails internally setting the size to the size of the buffer GetDefaultPrinter(null,ref size); if (size != 0) { //default printer set return true; } return false; }

使用此函数返回默认打印机名称,如果未设置默认值,则返回空字符串:

public static string GetDefaultPrintername() { //initialise size at 0,ref size); if (size == 0) { //no default printer set return ""; } StringBuilder printernameStringBuilder = new StringBuilder(size); bool success = GetDefaultPrinter(printernameStringBuilder,ref size); if (!success) { throw new Win32Exception(Marshal.GetLastWin32Error()); } return printernameStringBuilder.ToString(); }

完整的代码在控制台应用程序中测试:

using System; using System.ComponentModel; using System.Runtime.InteropServices; using System.Text; namespace DefaultPrinter { class Program { static voID Main(string[] args) { Console.Writeline(IsDefaultPrinterassigned()); Console.Writeline(GetDefaultPrintername()); Console.Readline(); } [Dllimport("winspool.drv",CharSet = CharSet.auto,SetLastError = true)] private static extern bool GetDefaultPrinter( StringBuilder buffer,ref int bufferSize); public static bool IsDefaultPrinterassigned() { //initialise size at 0,used to determine size of the buffer int size = 0; //for first call provIDe a null StringBuilder to and 0 size to determine buffer size //return value will be false,ref size); if (size != 0) { //default printer set return true; } return false; } public static string GetDefaultPrintername() { //initialise size at 0,ref size); if (!success) { throw new Win32Exception(Marshal.GetLastWin32Error()); } return printernameStringBuilder.ToString(); } } }

有一个Java API来获取默认打印机:

PrintService defaultPrinter = PrintServiceLookup.lookupDefaultPrintService();

如果没有默认的打印机或服务,则返回null 。 这可以用作测试。

老答案

这些信息可以在注册表中找到。 您无法使用普通Java访问注册表,但是存在针对此问题的JNDI解决方案。 所以基本上你必须测试,如果在注册表中存在某个键。 而且,作为奖励,如果你来到这么远,你甚至应该能够得到默认打印机的名称:)

进一步阅读:

在注册表中更改用户的默认打印机

jRegistryKey (作为一个例子,围绕着更多的解决方案)

总结

以上是内存溢出为你收集整理的如何检查是否有默认打印机(Windows)?全部内容,希望文章能够帮你解决如何检查是否有默认打印机(Windows)?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1293828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存