有没有一个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)?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)