Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
786 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Lister les imprimantes par utilisateur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lister les imprimantes par utilisateur

n°2302405
shlomi
Posté le 23-06-2017 à 15:57:38  profilanswer
 

Bonjour à tous,
 
J'aimerai créer un script qui serai capable de me lister les imprimantes connectées à mes utilisateurs.
En clair pour chaque utilisateur une liste des imprimantes qu'il utilise.
 
Si quelqu'un a une idée  
 
j'ai trouvé un script mais c'etait par rapport au nom du pc et fallait taper chaque pc donc bon...
 
 
Merci d'avance

mood
Publicité
Posté le 23-06-2017 à 15:57:38  profilanswer
 

n°2302406
patrice337​40
Avec la réponse, c'est facile.
Posté le 23-06-2017 à 16:45:16  profilanswer
 

Bonjour,
 
Un vieux code que fonctionne toujours en 32 bits (à adapter si 64 bits) :

Code :
  1. Option Explicit
  2. Declare Function lstrcpy Lib "kernel32.dll" Alias "lstrcpyA" _
  3.         (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
  4. Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal lpString As Long) As Long
  5. Declare Function EnumPrinters Lib "winspool.drv" Alias "EnumPrintersA" _
  6.         (ByVal flags As Long, ByVal name As String, ByVal Level As Long, pPrinterEnum As Long, _
  7.         ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
  8. Type Imprimante_1
  9.   flags As Long
  10.   pDescription As String
  11.   pName As String
  12.   pComment As String
  13. End Type
  14. Function EnumèreImprimantes() As String
  15. ' Objet     : Liste les imprimantes installées
  16. '
  17. ' Retour    : String              Liste des noms des imprimantes installées ou chaine vide si
  18. '                                 aucune imprimante n'est installée.
  19. '
  20. ' 04/07/07    Patrice             Création
  21.  
  22.   Dim BufferLong() As Long         ' Tableau qui reçoit les informations de EnumPrinters
  23.   Dim Données() As Imprimante_1    ' Recoit les valeurs de BufferLong()
  24.   Dim TailleBuffer As Long         ' Taille en bytes de BufferLong()
  25.   Dim BesoinBuffer As Long         ' Nbre de bytes necessaires si BufferLong() trop court
  26.   Dim NbImprimantes As Long        ' Nbre d'imprimantes trouvées
  27.   Dim Résultat As Long             ' Résultat retournée
  28.   Dim Compteur As Integer               ' Compteur
  29.   EnumèreImprimantes = ""
  30.   ' Récolte les informations sur les imprimantes locales
  31.   TailleBuffer = 1200                                ' Taille assez importante mais pas trop
  32.   ReDim BufferLong(0 To TailleBuffer / 4) As Long    ' Redimension buffer (1 Long = 4 bytes)
  33.   Résultat = EnumPrinters(2, "", 1, BufferLong(0), TailleBuffer, BesoinBuffer, NbImprimantes)
  34.   If Résultat = 0 Then
  35.     TailleBuffer = BesoinBuffer
  36.     ReDim BufferLong(0 To TailleBuffer / 4) As Long  ' Agrandir buffer à la taille nécessaire
  37.     Résultat = EnumPrinters(2, "", 1, BufferLong(0), TailleBuffer, BesoinBuffer, NbImprimantes)
  38.     If Résultat = 0 Then Exit Function                ' Si nouvel échec, terminer
  39.   End If
  40.   If NbImprimantes = 0 Then Exit Function
  41.   ' Converti les données de BufferLong() vers Données()
  42.   ReDim Données(0 To NbImprimantes - 1) As Imprimante_1
  43.   ' Boucle qui définit chaque élément à partir du jeu d'informations reçues
  44.   For Compteur = 0 To NbImprimantes - 1
  45.     ' BufferLong(4 * Compteur) = .flags, BufferLong(4 * Compteur + 1) = .pDescription, etc.
  46.     ' Pour chaque élément, la chaine est est d'abord stockée dans le buffer pour disposer
  47.     ' d'assez de place, et alors l'élément est copié. »
  48.     Données(Compteur).flags = BufferLong(4 * Compteur)
  49.     Données(Compteur).pDescription = Space(lstrlen(BufferLong(4 * Compteur + 1)))
  50.     Résultat = lstrcpy(Données(Compteur).pDescription, BufferLong(4 * Compteur + 1))
  51.     Données(Compteur).pName = Space(lstrlen(BufferLong(4 * Compteur + 2)))
  52.     Résultat = lstrcpy(Données(Compteur).pName, BufferLong(4 * Compteur + 2))
  53.     Données(Compteur).pComment = Space(lstrlen(BufferLong(4 * Compteur + 3)))
  54.     Résultat = lstrcpy(Données(Compteur).pComment, BufferLong(4 * Compteur + 3))
  55.   Next Compteur
  56.   ' Renvoie le nom de chaque imprimante
  57.   For Compteur = 0 To NbImprimantes - 1
  58.     EnumèreImprimantes = EnumèreImprimantes & Données(Compteur).pName & vbCr
  59.   Next Compteur
  60.  
  61. End Function


---------------
Cordialement, Patrice
n°2302458
shlomi
Posté le 26-06-2017 à 08:17:34  profilanswer
 

Bonjour et Merci pour votre réponse.
N'étant pas un as du codage pouvez vous me dire que faut il changer pour un système 64 bits.  
Et j'ai oublié de vous dire que c'étaient des imprimantes paratgées via le serveur d'impression je ne sais pas si cela change quelque chose.
Cordialement

n°2302466
shlomi
Posté le 26-06-2017 à 11:44:33  profilanswer
 

J'ai essayer de mettre ce script en ouverture de session par gpo mais la commande en elle meme n'a pas l'air de fonctionner  
 
reg query HKEY_CURRENT_USER\Printers\Connections >> //monserveur/printers/%username%.txt
 
avec le dossier printers partager et tout le monde a tous les droits

n°2302496
patrice337​40
Avec la réponse, c'est facile.
Posté le 26-06-2017 à 22:35:30  profilanswer
 

Bonjour,
 
Voila une version x32 et x64 simplifiée (il s'agit de VBA Excel)

Code :
  1. Option Explicit
  2. Private Const PRINTER_ENUM_CONNECTIONS = &H4
  3. Private Const PRINTER_ENUM_LOCAL = &H2
  4. #If Win64 Then
  5.   Private Declare PtrSafe Function StrCopy Lib "kernel32.dll" Alias "lstrcpyA" _
  6.      (ByVal lpString1 As String, ByVal lpString2 As Long) As LongPtr
  7.   Private Declare PtrSafe Function StrLen Lib "kernel32.dll" Alias "lstrlenA" _
  8.     (ByVal lpString As Long) As LongPtr
  9.   Private Declare PtrSafe Function EnumPrinters Lib "winspool.drv" Alias "EnumPrintersA" _
  10.     (ByVal flags As Long, ByVal name As String, ByVal Level As Long, pPrinterEnum As Any, _
  11.      ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As LongPtr
  12. #Else
  13.   Private Declare Function StrCopy Lib "kernel32.dll" Alias "lstrcpyA" _
  14.     (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
  15.   Private Declare Function StrLen Lib "kernel32.dll" Alias "lstrlenA" _
  16.     (ByVal lpString As Long) As Long
  17.   Private Declare Function EnumPrinters Lib "winspool.drv" Alias "EnumPrintersA" _
  18.     (ByVal flags As Long, ByVal name As String, ByVal Level As Long, pPrinterEnum As Any, _
  19.      ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
  20. #End If
  21. Public Sub Test()
  22. ' Exemple d'utilisation
  23. '
  24.   MsgBox EnumèreImprimantes
  25. End Sub
  26. Public Function EnumèreImprimantes() As String
  27. Dim BufferLong() As Long          ' Informations de EnumPrinters
  28. Dim NomImprimante As String       ' Nom de l'imprimante
  29. Dim TailleBuffer As Long          ' Taille en bytes de BufferLong()
  30. Dim BesoinBuffer As Long          ' Nbre de bytes necessaires si BufferLong() trop court
  31. Dim NbImprimantes As Long         ' Nbre d'imprimantes trouvées
  32. Dim Pointeur As Long              ' Pointeur
  33. Dim Compteur As Integer           ' Compteur
  34. Dim Réussite As Boolean           ' Réussite énumération
  35.        
  36.   EnumèreImprimantes = ""
  37.   TailleBuffer = 1200
  38.   ReDim BufferLong(0 To TailleBuffer / 4) As Long
  39.   Réussite = EnumPrinters(PRINTER_ENUM_LOCAL Or PRINTER_ENUM_CONNECTIONS, vbNullString, 4, BufferLong(0), _
  40.                           TailleBuffer, BesoinBuffer, NbImprimantes)
  41.   If Not Réussite Then
  42.     ReDim BufferLong(0 To BesoinBuffer / 4) As Long
  43.     Réussite = EnumPrinters(PRINTER_ENUM_LOCAL Or PRINTER_ENUM_CONNECTIONS, vbNullString, 4, BufferLong(0), _
  44.                             BesoinBuffer, BesoinBuffer, NbImprimantes)
  45.     If Not Réussite Then Exit Function
  46.   End If
  47.   If NbImprimantes = 0 Then Exit Function
  48.  
  49.   For Compteur = 0 To NbImprimantes - 1
  50.     NomImprimante = Space$(StrLen(BufferLong(Compteur * 3)))
  51.     Pointeur = StrCopy(NomImprimante, BufferLong(Compteur * 3))
  52.     EnumèreImprimantes = EnumèreImprimantes & NomImprimante & vbCr
  53.   Next Compteur
  54. End Function


---------------
Cordialement, Patrice
n°2302502
shlomi
Posté le 27-06-2017 à 09:39:47  profilanswer
 

Merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Lister les imprimantes par utilisateur

 

Sujets relatifs
[pgsql] ☑ impossible de se connecter avec nouvel utilisateurVBS Lister les fichiers d'un répertoire et sous repertoire
Lister les différences de types de données entre les colonnes clésMacro qui lance application avec Utilisateur et mdp
recherche librairie pour créer un requeteur pour utilisateur finalLister les comptes d'un ordinateur via script
caddie juste pour lister les Produitsonglet exel caché avec code et accès avec utilisateur
[Résolu] VBS Passer droits administrateur=> delete des imprimantesPowershell - Problème script création d'utilisateur dans l'AD
Plus de sujets relatifs à : Lister les imprimantes par utilisateur



Copyright © 1997-2016 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR