我需要获取默认的打印机名称。我将使用C#,但我怀疑这更像是一个框架问题而且不是特定于语言的。
答案 0 :(得分:110)
我找到的最简单方法是创建一个新的PrinterSettings
对象。它以所有默认值开头,因此您可以检查其 Name 属性以获取默认打印机的名称。
PrinterSettings
位于名称空间System.Drawing.Printing
中的System.Drawing.dll中。
PrinterSettings settings = new PrinterSettings();
Console.WriteLine(settings.PrinterName);
或者,您可以使用静态PrinterSettings.InstalledPrinters
方法获取所有打印机名称的列表,然后设置 PrinterName 属性并检查 IsDefaultPrinter 。我没试过这个,但是文档似乎暗示它不起作用。显然 IsDefaultPrinter 仅在未明确设置 PrinterName 时才为真。
答案 1 :(得分:28)
另一种方法是使用WMI(您需要添加对System.Management程序集的引用):
public static string GetDefaultPrinterName()
{
var query = new ObjectQuery("SELECT * FROM Win32_Printer");
var searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject mo in searcher.Get())
{
if (((bool?) mo["Default"]) ?? false)
{
return mo["Name"] as string;
}
}
return null;
}
答案 2 :(得分:11)
如果您只是希望打印机名称没有任何优势。但WMI能够返回大量其他打印机属性:
using System;
using System.Management;
namespace Test
{
class Program
{
static void Main(string[] args)
{
ObjectQuery query = new ObjectQuery(
"Select * From Win32_Printer " +
"Where Default = True");
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(query);
foreach (ManagementObject mo in searcher.Get())
{
Console.WriteLine(mo["Name"] + "\n");
foreach (PropertyData p in mo.Properties)
{
Console.WriteLine(p.Name );
}
}
}
}
}
而不仅仅是打印机。如果您对任何类型的计算机相关数据感兴趣,您可以通过WMI获得它。 WQL(SQL的WMI版本)也是它的优势之一。
答案 3 :(得分:9)
我总是在这种情况下使用System.Printing.LocalPrintServer,这也可以获得打印机是本地,网络还是传真。
string defaultPrinter;
using(var printServer = new LocalPrintServer()) {
defaultPrinter = printServer.DefaultPrintQueue.FullName);
}
或使用静态方法GetDefaultPrintQueue
LocalPrintServer.GetDefaultPrintQueue().FullName
答案 4 :(得分:1)
也请尝试此示例
PrinterSettings printerName = new PrinterSettings();
string defaultPrinter;
defaultPrinter = printerName.PrinterName;
答案 5 :(得分:0)
PrintDialog
对象的实例。PrinterName
留空。这将导致windows对象返回defualt打印机名称代码:
Try
Dim _printDialog As New System.Windows.Forms.PrintDialog
xPrinterName = _printDialog.PrinterSettings.PrinterName '= "set as Default printer"
Catch ex As Exception
System.Windows.Forms.MessageBox.Show("could not printed Label.", "Print Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
答案 6 :(得分:0)
这应该有效:
using System.Drawing.Printing;
PrinterSettings settings = new PrinterSettings();
string defaultPrinterName = settings.PrinterName;