IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Lister les imprimantes installées sur le poste


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 132
    Points : 70
    Points
    70
    Par défaut Lister les imprimantes installées sur le poste
    Bonjour,

    Pour lister les imprimantes présentes sur un poste (local et réseau) j'ai cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    PROCEDURE Listeimprimantes()
     
     
    x_PRINTER_INFO_2 est une structure
    	pServerName est un entier
    	pPrinterName est un entier
    	pShareName est un entier
    	pPortName est un entier
    	pDriverName est un entier
    	pComment est un entier
    	pLocation est un entier
    	pDevMode est un entier
    	pSepFile est un entier
    	pPrintProcessor est un entier
    	pDatatype est un entier
    	pParameters est un entier
    	pSecurityDescriptor est un entier
    	Attributes est un entier
    	Priority est un entier
    	DefaultPriority est un entier
    	StartTime est un entier
    	UntilTime est un entier
    	Status est un entier
    	cJobs est un entier
    	AveragePPM est un entier
    END
     
     
    Level, pcbNeeded, pcReturned, Ret, i , Flag sont des entiers
    tPRINTER est un tableau de 3000 x_PRINTER_INFO_2
    Buf est une chaîne ASCIIZ sur 1024
    ComputerName est une chaîne ASCIIZ sur 128 = "\\" + NetNomMachine()
    ListeImprimante est une chaîne = ""
     
    Flag = OUBinaire(PRINTER_ENUM_LOCAL,PRINTER_ENUM_CONNECTIONS)
    Level = 2; pcbNeeded = 0; pcReturned = 0
     
    // Appel une fois la fonction avec 0 pour connaitre le nombre d'octet nessecaire (renvoyé dans pcNeeded)
    API("winspool.drv","EnumPrintersA", Flag, &ComputerName, Level, &tPRINTER, 0 , &pcbNeeded, &pcReturned)
     
    // Appel une seconde fois avec la bonne valeur
    Ret = API("winspool.drv","EnumPrintersA", Flag, &ComputerName, Level, &tPRINTER, pcbNeeded, &pcbNeeded, &pcReturned)
    IF Ret=1 THEN
    	// C'est bon pcReturned contient le nombre d'imprimante donc le nombre de structure valide dans le tableau
    	FOR i=1 TO pcReturned
    		IF ListeImprimante <> "" THEN ListeImprimante += CRLF
    		Transfert(&Buf,tPRINTER[i]:pServerName,1023); ListeImprimante += Buf + "\"
    		Transfert(&Buf,tPRINTER[i]:pShareName,1023); ListeImprimante += Buf
     
    	END
    END
     
    RENVOYER ListeImprimante
    Or cela marche sur 2 postes que j'ai testés et pas sur 2 autres.
    Je ne comprend pas du tout!

    Auriez vous une idée ??

  2. #2
    Membre expérimenté Avatar de klbsjpolp
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 065
    Points : 1 322
    Points
    1 322
    Par défaut
    Bonjour,

    La fonction iListeImprimante ne fait pas ce que tu veux?
    «Un problème bien défini est un problème à moitié résolu.»

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 132
    Points : 70
    Points
    70
    Par défaut
    En fait elle renvoie le nom de l'imprimante et moi, il me faut le nom de partage.
    C'est pour ça que j'utilise ce que j'ai mis plus haut.
    Mais je trouve étrange que cela marche sur un pc et pas l'autre (2 sous xp)

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 007
    Points : 9 401
    Points
    9 401
    Par défaut
    bonjour,

    une solution pour avoir des infos systèmes consiste à utiliser WMI.
    Le problème c'est que c'est pas natif dans Windev et il faut passer par DotNet.
    Il faudra donc avoir dotnet installé sur les postes cibles.
    Voici la marche à suivre pour par exemple récupérer des infos imprimantes :

    Pour utiliser cela dans votre projet il vous faut :
    1 - Utiliser l'assemblage .NET "System.Management" :
    Menu Atelier/.NET/Utiliser Un Assemblage .NET dans ce projet
    Dans la fenêtre qui s'ouvre cliquer sur "Lister les assemblages référencés"
    Quand la recherche est terminée cocher "Mscorlib" et "System.Management"
    2 - Récupérer la collection de procédure pWMI.wdg qui se trouve dans l'exemple complet WD WMI DOTNET
    et l'inclure dans votre projet
    Rajouter la procédure suivante dans votre collection pWMI.wdg
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    PROCEDURE RécupèreInfoImprimantes()
     
     
    sChaineRetour est une chaîne
    sListeInfo est une chaîne
    sUneInformation est une chaîne
     
    // Récupération de toutes les informations sur les imprimantes
    sListeInfo = RécupèreContenu("win32_Printer",  gsServeur + "root\CIMV2")
     
     
    POUR TOUTE CHAINE sUneInformation DE sListeInfo SEPAREE PAR RC+RC
    	SI sUneInformation = "" ALORS SORTIR
    	// Récupération des informations
    	sChaineRetour += "Imprimante : " + TrouveInformation(sUneInformation,"Caption") + RC +...
    	// Récupération du status
    	// Valeur Signification
    	// 1 (0x1) Other
    	// 2 (0x2) Unknown
    	// 3 (0x3) Idle
    	// 4 (0x4) Printing
    	// 5 (0x5) Warming Up
    	// 6 (0x6) Stopped printing
    	// 7 (0x7) Offline
    	// Attention cette info peut être fausse si WorkOffLine = 1 ( mode Hors connexion)
    	"Status : " + TrouveInformation(sUneInformation,"PrinterStatus") + RC +...
    	// Récupération du nom de serveur
    	"ServerName : " + TrouveInformation(sUneInformation,"ServerName") + RC +...
    	// Récupération du nom de partage
    	"ShareName  : " + TrouveInformation(sUneInformation,"ShareName") + RC +...	
    	"=====================================================" + RC
    FIN
     
     RENVOYER sChaineRetour
    et voilà y a plus qu'à modifier la procédure RécupèreInfoImprimantes() suivant ses besoins.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 132
    Points : 70
    Points
    70
    Par défaut
    Désolé pour la réponse tardive.
    Déjà merci pour le détail de la procédure, je n'y serait pas arrivé sans toi.
    J'ai donc mis cela en place mais je ne comprend pas tout :

    Toutes les imprimantes installées n'apparaissent pas : ex :
    PDFCreator est dans la liste mais pas Microsoft Office Document Image Writer.

    Sur les postes ou j'ai testé j'ai l'impression que seules celles installées et accessibles sont listées, c'est ça ?

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 007
    Points : 9 401
    Points
    9 401
    Par défaut
    oui
    chez moi , j'ai la liste des imprimantes qui se trouvent dans :
    Périphériques et imprimantes/Imprimantes et télécopieurs

    par contre comme je n'ai pas d'imprimantes réseaux je ne peux pas te dire pour ce type d'imprimantes.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [.NET 2.0] Lister les programmes installés sur un PC
    Par Aspic dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/04/2007, 18h01
  2. Réponses: 4
    Dernier message: 23/11/2006, 17h47
  3. Lister les codecs installés sur la machine
    Par hanane_iaai dans le forum Windows
    Réponses: 6
    Dernier message: 18/07/2005, 10h17
  4. Réponses: 5
    Dernier message: 04/05/2005, 15h39
  5. Lister les softs installés sur un Pc
    Par Jflgb dans le forum C++Builder
    Réponses: 18
    Dernier message: 23/06/2004, 17h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo