93 votes

Quelle est la meilleure façon d'obtenir la valeur par défaut de l'imprimante .NET

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.

153voto

OwenP Points 11164

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.

32voto

Nathan Baulch Points 7994

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;
}

11voto

Alexander Zwitbaum Points 1627

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X