デフォルトのプリンタ名を取得する必要があります。私はC#を使用しますが、これはフレームワークの質問であり、言語固有ではないと思います。
回答:
私が見つけた最も簡単な方法は、新しいPrinterSettingsオブジェクトを作成することです。すべてのデフォルト値で開始されるため、Nameプロパティを確認して、デフォルトのプリンタの名前を取得できます。
PrinterSettings名前空間のSystem.Drawing.dllにありますSystem.Drawing.Printing。
PrinterSettings settings = new PrinterSettings();
Console.WriteLine(settings.PrinterName);
または、静的PrinterSettings.InstalledPrintersメソッドを使用してすべてのプリンター名のリストを取得し、PrinterNameプロパティを設定して、IsDefaultPrinterを確認することもできます。私はこれを試していませんが、ドキュメントはそれが機能しないことを示唆しているようです。どうやらIsDefaultPrinterは、PrinterNameが明示的に設定されていない場合にのみtrueになります。
別のアプローチは、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;
}
プリンタ名だけが必要な場合は、まったく利点がありません。ただし、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バージョン)もその利点の1つです。
この場合、私は常にSystem.Printing.LocalPrintServerを使用します。これにより、プリンターがローカル、ネットワーク、またはファックスのいずれであるかを取得することもできます。
string defaultPrinter;
using(var printServer = new LocalPrintServer()) {
defaultPrinter = printServer.DefaultPrintQueue.FullName);
}
または静的メソッドGetDefaultPrintQueueを使用する
LocalPrintServer.GetDefaultPrintQueue().FullName
PrintDialogオブジェクトの。PrinterName空白のます。これにより、windowsオブジェクトはデフォルトのプリンタ名を返します。コード:
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