50 votes

Comment obtenir des informations sur l'imprimante dans .NET ?

Dans le dialogue PrintDialog standard, quatre valeurs sont associées à l'imprimante sélectionnée : Statut, Type, Où et Commentaire.

Si je connais le nom d'une imprimante, comment puis-je obtenir ces valeurs en C# 2.0 ?

74voto

Panos Points 11429

En dowski a suggéré Vous pouvez utiliser WMI pour obtenir les propriétés de l'imprimante. Le code suivant affiche toutes les propriétés d'une imprimante donnée. Parmi elles, vous trouverez : PrinterStatus, Comment, Location, DriverName, PortName, etc.

using System.Management;

...

string printerName = "YourPrinterName";
string query = string.Format("SELECT * from Win32_Printer WHERE Name LIKE '%{0}'", printerName);

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
using (ManagementObjectCollection coll = searcher.Get())
{
    try
    {
        foreach (ManagementObject printer in coll)
        {
            foreach (PropertyData property in printer.Properties)
            {
                Console.WriteLine(string.Format("{0}: {1}", property.Name, property.Value));
            }
        }
    }
    catch (ManagementException ex)
    {
        Console.WriteLine(ex.Message);
    }
}

4 votes

Cela a fonctionné, j'ai pu trouver et lire toutes les propriétés dont j'avais besoin. Je vous remercie de votre attention.

1 votes

Dans les propriétés de l'imprimante, j'utilise Printer.Properties["PrinterStatus"].Value, et j'obtiens la valeur 2. Quelle est la signification de cette valeur 2 ? Existe-t-il une liste où l'on peut connaître la signification des valeurs retournées ?

0 votes

J'ai un scanner hp scanjet 5590, tous les pilotes sont installés et il numérise les documents correctement. Mais lorsque j'utilise WMI pour obtenir l'état du scanner, le WMI ne le détecte pas. Dans le panneau de configuration de Win-7, il apparaît sous la rubrique DISPOSITIFS et non sous la rubrique IMPRIMANTES dans la section Dispositifs et imprimantes. Comment obtenir l'état du scanner ?

25voto

Powerlord Points 43989

Le présent devrait trabajo.

using System.Drawing.Printing;

...

PrinterSettings ps = new PrinterSettings();
ps.PrinterName = "The printer name"; // Load the appropriate printer's setting

Ensuite, les différents propriétés de PrinterSettings peut être lue.

Il convient de noter que ps.isValid() peut vérifier si l'imprimante existe réellement.

Edit : Un commentaire supplémentaire. Microsoft recommande d'utiliser un Imprimer le document et de modifier son PrinterSettings plutôt que de créer directement un PrinterSettings.

0 votes

Mais j'ai aussi besoin de l'adresse IP et du nom du port. Comment obtenir l'adresse IP et le nom du port pour l'imprimante sélectionnée/chargée ?

0 votes

Il y a une mauvaise façon de le faire, en utilisant la méthode de réponse sélectionnée, elle donne le nom du serveur pour l'imprimante et si nous faisons un ping de ce nom, il se résout en adresse IP et c'est là que le résultat du ping peut être analysé. Merci de me dire s'il y a une meilleure façon de procéder.

0 votes

J'utilise .Net 4.5, pas disponible dans .Net 4.5

7voto

Runscope API Tools Points 43859

3voto

itsho Points 676

Veuillez noter que l'article qui dowski y Panos se référait à ( MSDN Win32_Printer ) peut être un peu trompeuse.

Je me réfère à la première valeur de la plupart des tableaux. Certains commencent par 1 et d'autres par 0. Par exemple, " État de l'imprimante étendue "La première valeur du tableau est 1. Par conséquent, votre tableau devrait ressembler à ceci :

string[] arrExtendedPrinterStatus = { 
    "","Other", "Unknown", "Idle", "Printing", "Warming Up",
    "Stopped Printing", "Offline", "Paused", "Error", "Busy",
    "Not Available", "Waiting", "Processing", "Initialization",
    "Power Save", "Pending Deletion", "I/O Active", "Manual Feed"
};

et d'autre part, " État d'erreur "La première valeur du tableau est 0. Par conséquent, votre tableau devrait ressembler à ceci :

string[] arrErrorState = {
    "Unknown", "Other", "No Error", "Low Paper", "No Paper", "Low Toner",
    "No Toner", "Door Open", "Jammed", "Offline", "Service Requested",
    "Output Bin Full"
};

BTW, " État de l'imprimante "est obsolète, mais vous pouvez utiliser " Statut de l'imprimante ".

3voto

dowski Points 2143

Cela fait longtemps que je n'ai pas travaillé dans un environnement Windows, mais je vous suggère de consulter Utilisation de WMI .

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