Мне нужно получить имя принтера по умолчанию. Я буду использовать С#, но я подозреваю, что это больше вопрос рамки и не зависит от языка.
Каков наилучший способ получить принтер по умолчанию в .NET.
Ответ 1
Самый простой способ - создать новый объект PrinterSettings
. Он начинается со всех значений по умолчанию, поэтому вы можете проверить его свойство Name, чтобы получить имя принтера по умолчанию.
PrinterSettings
находится в System.Drawing.dll в пространстве имен System.Drawing.Printing
.
PrinterSettings settings = new PrinterSettings();
Console.WriteLine(settings.PrinterName);
В качестве альтернативы вы можете использовать статический метод PrinterSettings.InstalledPrinters
для получения списка всех имен принтеров, затем установить свойство PrinterName и проверить IsDefaultPrinter. Я не пробовал это, но документация, похоже, предполагает, что это не сработает. Очевидно, что IsDefaultPrinter имеет значение true, только когда PrinterName явно не задано.
Ответ 2
Другой подход - использование 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;
}
Ответ 3
Если вы просто хотите, чтобы имя принтера не имело никакого преимущества. Но 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) также является одним из его преимуществ.
Ответ 4
В этом случае я всегда использую System.Printing.LocalPrintServer, который также позволяет получить, является ли принтер локальным, сетевым или факсимильным.
string defaultPrinter;
using(var printServer = new LocalPrintServer()) {
defaultPrinter = printServer.DefaultPrintQueue.FullName);
}
или используя статический метод GetDefaultPrintQueue
LocalPrintServer.GetDefaultPrintQueue().FullName
Ответ 5
Попробуйте также этот пример
PrinterSettings printerName = new PrinterSettings();
string defaultPrinter;
defaultPrinter = printerName.PrinterName;
Ответ 6
- Создайте экземпляр объекта
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
Ответ 7
Это должно работать:
using System.Drawing.Printing;
PrinterSettings settings = new PrinterSettings(); string defaultPrinterName = settings.PrinterName;