Devo ottenere il nome predefinito della stampante. Userò C # ma sospetto che si tratti più di una domanda quadro che non sia specifica della lingua.
Il modo più semplice che ho trovato è creare un nuovo oggetto PrinterSettings
. Inizia con tutti i valori predefiniti, quindi puoi controllare la sua proprietà Nome per ottenere il nome della stampante predefinita.
PrinterSettings
si trova in System.Drawing.dll nello spazio dei nomi System.Drawing.Printing
.
PrinterSettings settings = new PrinterSettings();
Console.WriteLine(settings.PrinterName);
In alternativa, potresti usare lo statico PrinterSettings.InstalledPrinters
per ottenere un elenco di tutti i nomi delle stampanti, quindi impostare la proprietà PrinterName e controllare IsDefaultPrinter. Non l'ho provato, ma la documentazione sembra suggerire che non funzionerà. Apparentemente IsDefaultPrinter è vero solo quando PrinterName non è impostato esplicitamente.
Un altro approccio è l'utilizzo di WMI (è necessario aggiungere un riferimento a System.Management Assembly):
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;
}
Se si desidera solo il nome della stampante, nessun vantaggio. Ma WMI è in grado di restituire un sacco di altre proprietà della stampante:
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 );
}
}
}
}
}
e non solo stampanti. Se sei interessato a qualsiasi tipo di dati relativi al computer, è probabile che tu possa ottenerli con WMI. WQL (la versione WMI di SQL) è anche uno dei suoi vantaggi.
Uso sempre in questo caso System.Printing.LocalPrintServer, che rende anche possibile ottenere se la stampante è locale, di rete o fax.
string defaultPrinter;
using(var printServer = new LocalPrintServer()) {
defaultPrinter = printServer.DefaultPrintQueue.FullName);
}
o usando un metodo statico GetDefaultPrintQueue
LocalPrintServer.GetDefaultPrintQueue().FullName
Prova anche questo esempio
PrinterSettings printerName = new PrinterSettings();
string defaultPrinter;
defaultPrinter = printerName.PrinterName;
PrintDialog
.PrinterName
. questo farà sì che l'oggetto Windows restituisca il nome della stampante predefinitoCodice:
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
Questo dovrebbe funzionare:
using System.Drawing.Printing;
PrinterSettings settings = new PrinterSettings(); string defaultPrinterName = settings.PrinterName;