[.Net – PrintQueue] Des propriétés oubliées !

Chers lecteurs,

Récemment j’ai voulu faire une petite application de test pour le monitoring des imprimantes en local ou à distance sans utiliser le traditionnel WMI qui à mon sens est lent, fastidieux à utiliser et nous avons aujourd’hui un framework digne de ce nom.

Hors je me suis aperçu d’un problème, toutes les propriétés que nous avons l’habitude de retrouver dans les objets résultants d’une recherche WMI ne sont pas toutes disponibles dans le wrapper du framework.

Donc lorsque nous faisons une requête WMI utilisant Win32_Printer nous avons une collection d’objets ayant comme propriétés: le nom, le status de l’imprimante, le status de la queue ou encore si celle ci n’est pas en mode Hors connexion.
Pour la liste détaillée avec leurs nom respectifs je vous invite à suivre le lien suivant: http://msdn.microsoft.com/en-us/library/windows/desktop/aa394363(v=vs.85).aspx

A ma grande surprise la class PrintQueue du framework .Net ne possède pas la propriété WorkOffline par exemple, ce qui est fâcheux puisque la propriété IsOffline correspond uniquement au port de la queue (qui soit dit en passant ne fonctionne pas correctement).

Donc pour comblé se manque je vous publie mes méthodes d’extensions.

public static class PrintQueueExtention
{
    /// <summary>
    /// WorkOffline
    /// Queue print jobs when a printer is not available.
    /// </summary>
    /// <param name="printQueue"></param>
    /// <returns>True/False</returns>
    public static bool IsWorkOffline(this PrintQueue printQueue)
    {
        return ((uint)printQueue.QueueAttributes & 0x400) == 0x400;
    }
    /// <summary>
    /// Default
    /// Default printer on a computer.
    /// </summary>
    /// <param name="printQueue"></param>
    /// <returns></returns>
    public static bool IsDefaultPrinter(this PrintQueue printQueue)
    {
        return ((uint)printQueue.QueueAttributes & 0x4) == 0x4;
    }

    /// <summary>
    /// Local
    /// Directly connected to a computer.
    /// </summary>
    /// <param name="printQueue"></param>
    /// <returns></returns>
    public static bool IsLocalPrinter(this PrintQueue printQueue)
    {
        return !printQueue.IsNetworkPrinter() && ((uint)printQueue.QueueAttributes & 0x40) == 0x40;
    }
    /// <summary>
    /// Network
    /// Attached to a network.
    /// </summary>
    /// <param name="printQueue"></param>
    /// <returns></returns>
    public static bool IsNetworkPrinter(this PrintQueue printQueue)
    {
        return ((uint)printQueue.QueueAttributes & 0x10) == 0x10;
    }
}

Concernant les valeurs hexadécimales, elle proviennent de la documentation de la propriété Attributes pour la classe WMI Win32_Printer.

@ bientôt.

Tagged with: , , , ,
Publié dans .Net

Laisser un commentaire