Question

Dans le PrintDialog standard, une imprimante sélectionnée est associée à quatre valeurs: Statut, Type, Où et Commentaire.

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

Était-ce utile?

La solution

Comme suggéré par , vous pouvez utiliser WMI pour obtenir les propriétés de l'imprimante. Le code suivant affiche toutes les propriétés pour un nom d'imprimante donné. Parmi eux, vous trouverez: PrinterStatus, Comment, Emplacement, Nom du pilote, Nom du port, 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);
    }
}

Autres conseils

Cela devrait fonctionner.

using System.Drawing.Printing;

...

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

Après cela, les différents les propriétés de PrinterSettings peuvent être lues.

Notez que ps.isValid () peut voir si l’imprimante existe réellement.

Modifier: un commentaire supplémentaire. Microsoft vous recommande d’utiliser un PrintDocument et modifier ses paramètres PrinterSettings plutôt que de créer directement un paramètre PrinterSettings.

Veuillez noter que les articles auxquels Dowski et Panos parlaient ( MSDN Win32_Printer ) peut être un peu trompeur.

Je fais référence à la première valeur de la plupart des tableaux. certains commencent par 1 et d'autres par 0. par exemple, " ExtendedPrinterStatus " la première valeur dans la table est 1, votre tableau devrait donc 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, " ErrorState " La première valeur de la table est 0, votre tableau doit donc 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, " PrinterState " est obsolète, mais vous pouvez utiliser " PrinterStatus ".

Juste pour référence, Voici la liste de toutes les propriétés disponibles pour un objet de gestion Imprimante.

usage: printer.Properties["PropName"].Value

Cela fait longtemps que je ne travaille pas dans un environnement Windows, mais je vous conseillerais de consulter à l'aide de WMI .

Je sais que c'est une vieille publication, mais de nos jours, l'option la plus simple et la plus rapide consiste à utiliser les services d'impression améliorés offerts par l'infrastructure WPF (utilisable par les applications non-WPF).

http://msdn.microsoft .com / fr-us / library / System.Printing (v = vs.110) .aspx

Exemple permettant de récupérer l'état de la file d'attente d'impression et du premier travail.

var queue = new LocalPrintServer().GetPrintQueue("Printer Name");
var queueStatus = queue.QueueStatus;
var jobStatus = queue.GetPrintJobInfoCollection().FirstOrDefault().JobStatus

Au lieu de WMI, vous pouvez obtenir des résultats rapides et précis en sélectionnant WinSpool.drv (API Windows). Vous pouvez obtenir tous les détails sur les interfaces, les structures et les paramètres; constantes de pinvoke.net, ou j’ai rassemblé le code à http://delradiesdev.blogspot.com/2012/02/accessing-printer-status-using-winspool.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top