J'ai besoin d'obtenir le nom d'imprimante par défaut. Je vais être à l'aide de C#, mais je suppose que c'est un cadre de la question et n'est pas spécifique à une langue.
Réponses
Trop de publicités?La façon la plus simple que j'ai trouvé est de créer un nouveau PrinterSettings
objet. Il commence avec toutes les valeurs par défaut, de sorte que vous pouvez vérifier son Nom de la propriété pour obtenir le nom de l'imprimante par défaut.
PrinterSettings
est en System.Drawing.dll dans l'espace de noms System.Drawing.Printing
.
PrinterSettings settings = new PrinterSettings();
Console.WriteLine(settings.PrinterName);
Sinon, vous pouvez peut-être utiliser la statique PrinterSettings.InstalledPrinters
méthode pour obtenir une liste de tous les noms d'imprimante, puis définissez la PrinterName de la propriété et de vérifier les IsDefaultPrinter. Je n'ai pas essayé, mais la documentation semble indiquer qu'il ne fonctionne pas. Apparemment IsDefaultPrinter est vrai uniquement quand PrinterName n'est pas explicitement défini.
Une autre approche est l'utilisation de WMI (vous aurez besoin d'ajouter une référence au Système.La gestion de l'assemblée):
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;
}
J'utilise toujours dans ce cas le Système.De l'impression.LocalPrintServer, ce qui rend également possible d'obtenir, si l'imprimante est en local, en réseau ou par fax.
string defaultPrinter;
using(var printServer = new LocalPrintServer()) {
defaultPrinter = printServer.DefaultPrintQueue.FullName);
}
ou à l'aide d'une méthode statique GetDefaultPrintQueue
LocalPrintServer.GetDefaultPrintQueue().FullName