Gestion des imprimantes (installation / suppression)
Posté : ven. 29 juin 2018 14:49
Bonjour, voilà un petit script que j'ai écrit pour gérer l'installation ou la suppression des imprimantes depuis le poste de travail, il est possible d'interroger un serveur d'impression pour récupérer les imprimantes partagées du domaine et de les sélectionner depuis un treeview pour les installer en tant qu'administrateur pour tous les utilisateurs, la même chose est faite pour les imprimantes locales qu'il est possible de sélectionner pour suppression. Je partage ce script pour la sélection et la gestion des items dans un treeview mais aussi son alimentation. De plus ce script pourrait servir a quelques un qui ont peut-être des postes à installer dans leurs entreprise (les imprimantes installées le sont pour tous les utilisateurs).
le script nécessite d'être administrateur dans le domaine ou a minima sur le serveur d'impression) pour être utilisé dans toutes ses fonctions.
la source de printMGR.au3 :
https://www.autoitscript.com/forum/topi ... ement-udf/
le script :
le script nécessite d'être administrateur dans le domaine ou a minima sur le serveur d'impression) pour être utilisé dans toutes ses fonctions.
la source de printMGR.au3 :
https://www.autoitscript.com/forum/topi ... ement-udf/
le script :
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\Users\0469327\Pictures\Icones\imprimantes.ico
#AutoIt3Wrapper_Outfile=printergui.exe
#AutoIt3Wrapper_Res_Comment=Gestion de l'installation des imprimantes
#AutoIt3Wrapper_Res_Description=Gestion de l'installation des imprimantes
#AutoIt3Wrapper_Res_Fileversion=1.0
#AutoIt3Wrapper_Res_LegalCopyright=
#AutoIt3Wrapper_Res_Language=1036
#AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <array.au3> ; Only for viewing the array.
#include <printMgr.au3>
#include <GuiListView.au3>
#include <GuiTreeView.au3>
;---------------------------PRINTERGUI -----------------------------------------------------------------------------------
;cette application permet de visuliser dans un treeview les imprimantes d'un ordinateur ou d'un serveur
;d'impression distant, de selectionner et d'installer les imprimantes désirées depuis ce serveur.
;Elle permet également de visulaiser les imprimantes installées sur le poste de travail et de les selectionner
;pour suppression. Elle utilise l'UDF <printMgr.au3> pour la suppression.
;l'installation des imprimantes se fait via printui.dll /ga qui permet l'installation d'une imprimante
;pour tous les utilisateurs d'un poste de travail. Necessite des droits administrateur.
;--------------------------------------------------------------------------------------------------------------------------------
;--------------------------------------------------------DECLARATION DES VARIABLES-------------------------------
Global $aPrinterList
Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
Global $g_eventerror = 0
Global $TVItemsID_Array[0]
Global $idTreeview
Global $SelAll_TVItem
Global $version = "1.0.0"
;-------------------------------------------------- CREATION DE LA GUI-------------------------------------------------
#Region ### START Koda GUI section ### Form=C:\DEVAU3\gestion imprimantes gui.kxf
SplashTextOn("PrinterGUI " & $version, "Initialisation Veuillez patienter",300,50) ; splash text d'attende de chagement de la gui
$Form1 = GUICreate("Gestion des imprimantes " & $version, 579, 618, 263, 295)
$Group1 = GUICtrlCreateGroup("Installation des imprimantes", 8, 8, 561, 313)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$LabelServeurImp = GUICtrlCreateLabel("Entrez l'adresse IP ou le nom du serveur d'impression : ", 16, 40, 267, 17)
$printserver = GUICtrlCreateInput("", 16, 64, 249, 21)
$ButtonSuppression = GUICtrlCreateButton("Supprimer les imprimantes ", 24, 368, 145, 41)
$label_installation = GUICtrlCreateLabel("Entrez le nom ou l'@ IP du serveur d'impression puis selectionner les imprimantes à installer",16,150,230,25)
$label_supression = GUICtrlCreateLabel("Sélectionner les imprimantes à supprimer --------->", 16,478,260,41)
;$label_conception =GUICtrlCreateLabel("Marcgforce @ 06/2018", 16,600)
$ButtonQuitter = GUICtrlCreateButton("Quitter", 432, 566, 129, 41)
$ButtonInstallation = GUICtrlCreateButton("Installer" ,144, 96, 121, 25)
GUICtrlSetState($ButtonInstallation, $GUI_DISABLE)
$ButtonVerifier = GUICtrlCreateButton("Verifier ", 16, 96, 113, 25)
$Group2 = GUICtrlCreateGroup("Suppression des imprimantes sur le poste de travail", 8, 328, 561, 231)
GUICtrlCreateGroup("", -99, -99, 1, 1)
;---------------------------------------CREATION DES TREEVIEWS----------------------------------------------------
Global $idTreeview = GUICtrlCreateTreeView(304, 32, 241, 273, BitOR($TVS_HASBUTTONS, $TVS_DISABLEDRAGDROP, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
Global $idTreeview_suppr = GUICtrlCreateTreeView(304, 350, 241, 190, BitOR($TVS_HASBUTTONS, $TVS_DISABLEDRAGDROP, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
dim $TVItemsID_Array_suppr[1]; déclaration du tableau contenant les imprimantes a supprimer
global $SelAll_TVItem_suppr = GUICtrlCreateTreeViewItem("Tout selectionner",$idTreeview_suppr) ; création du noeud permettant la sélection complète
$aPrinterList_suppr = _GetLocalPrinterList(@ComputerName) ; récupération des imprimantes locales dans un tableau pour les imprimantes locales
for $i = 0 to UBound($aPrinterList_suppr) -1
$TVItemsID_Array_suppr[$i] = GUICtrlCreateTreeViewItem($aPrinterList_suppr[$i][1], $SelAll_TVItem_suppr)
GUICtrlSetColor(-1, 0x0000C0)
ReDim $TVItemsID_Array_suppr[ubound($TVItemsID_Array_suppr)+1]
Next
GUICtrlSetState($SelAll_TVItem_suppr, $GUI_EXPAND) ; expension du noeud liste complète
SplashOff() ; fin du message d'attente
GUISetState(@SW_SHOW, $Form1) ; affichage de la gui
GUICtrlSetState($ButtonVerifier, $GUI_DEFBUTTON) ; mise en place du raccourcis clavier (ENTREE) pour le bouton verifier
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $ButtonQuitter
Exit
Case $ButtonVerifier ; traitement lors de l'appui sur le bouton verifier
$TVItemsID_Array = "" ; si le treeview est déjà alimenté il faut le vider
dim $TVItemsID_Array[1] ; pour tou recréer
_GUICtrlTreeView_DeleteAll ($idTreeview) ; suppression du treeview
$print_ip = GUICtrlRead($printserver) ; lecture de l'inputbox
if $print_ip = "" then ; controle de l'inputbox > ""
msgbox(64,"Erreur","Veuillez entrer l'adresse IP ou le nom du serveur d'impression")
Else
local $ping = test($print_ip) ; on teste si c'est un ordinateur
if $ping = true Then
$aPrinterList = _GetLocalPrinterList($print_ip) ; récupération des imprimantes pour l'installation
global $SelAll_TVItem = GUICtrlCreateTreeViewItem("Tout selectionner",$idTreeview); création du noeud pour la sélection totale
for $i = 0 to ubound($aPrinterList) -1
if StringLen($aPrinterList[$i][0]) = 0 then ; si une cellule du tableau est vide (imprimante non partagée)
$TVItemsID_Array[$i] = GUICtrlCreateTreeViewItem($aPrinterList[$i][1], $SelAll_TVItem)
Else
$TVItemsID_Array[$i] = GUICtrlCreateTreeViewItem($aPrinterList[$i][0], $SelAll_TVItem) ;on prend dans la cellume a coté
EndIf
GUICtrlSetColor(-1, 0x0000C0)
ReDim $TVItemsID_Array[ubound($TVItemsID_Array)+1] ; redimensionnement de l'array
Next
GUICtrlSetState($SelAll_TVItem, $GUI_EXPAND)
GUICtrlSetState($ButtonInstallation, $GUI_ENABLE)
Else
msgbox(64,"Erreur","Veuillez entrer l'adresse IP ou le nom du serveur d'impression")
EndIf
EndIf
Case $ButtonInstallation ; installation des imprimantes
local $j=1
local $aarray_checked[1]; création d'un tableau regroupant les imprimantes sélectionnées
$count = _GUICtrlTreeView_GetCount($idTreeview) ; comptage du nombre de noeuds dans le treeview
For $i = 0 To $count - 2
If _GUICtrlTreeView_GetChecked($idTreeview, $TVItemsID_Array[$i]) = True Then ; si la case est cochée
$aarray_checked[ubound($aarray_checked) -1] = _GUICtrlTreeView_GetText($idTreeview,$TVItemsID_Array[$i]) ; on récupère le texte et on le met dans l'array
redim $aarray_checked[ubound($aarray_checked)+1]
EndIf
Next
ProgressOn("INSTALLATION DES IMPRIMANTES ", "Installation de : ") ; petite barre de defilement des installation
for $i = 0 to ubound($aarray_checked)-2 ; lecture de l'array
$j = ($i + 1) * 100 / (ubound($aarray_checked) -2)
ProgressSet($j, "Installation de : " & $aarray_checked[$i])
$print_ip = GUICtrlRead($printserver)
RunWait('C:\WINDOWS\system32\cmd.exe /c "rundll32.exe printui.dll, PrintUIEntry /gd /q /n \\' & $print_ip & '\' & $aarray_checked[$i] & '"', '', @SW_HIDE) ; suppression de l'imprimante si elle existe déjà
sleep(1500) ; sa ça l'installation est trop rapide
RunWait('C:\WINDOWS\system32\cmd.exe /c "rundll32.exe printui.dll, PrintUIEntry /ga /n \\' & $print_ip & '\' & $aarray_checked[$i] & '"', '', @SW_HIDE) ; installation
Next
$aarray_checked = "" ; destruction de l'array
ProgressSet(100,"Installation terminée... nettoyage des fichiers")
sleep(2000)
ProgressOff()
$aarray_checked_suppr=""
$aPrinterList_suppr =""
$TVItemsID_Array_suppr=""
dim $TVItemsID_Array_suppr[1]
_GUICtrlTreeView_DeleteAll ($idTreeview_suppr)
$aPrinterList_suppr = _GetLocalPrinterList(@ComputerName)
;_ArrayDisplay($aPrinterList_suppr)
$SelAll_TVItem_suppr = GUICtrlCreateTreeViewItem("Tout selectionner",$idTreeview_suppr) ; l'idée ici est de rafraichir la liste des imprimantes installées localement
for $i = 0 to UBound($aPrinterList_suppr) -1
if StringLen($aPrinterList_suppr[$i][0]) = 0 then
$TVItemsID_Array_suppr[$i] = GUICtrlCreateTreeViewItem($aPrinterList_suppr[$i][0], $SelAll_TVItem_suppr)
Else
$TVItemsID_Array_suppr[$i] = GUICtrlCreateTreeViewItem($aPrinterList_suppr[$i][1], $SelAll_TVItem_suppr)
EndIf
GUICtrlSetColor(-1, 0x0000C0)
ReDim $TVItemsID_Array_suppr[ubound($TVItemsID_Array_suppr)+1]
Next
GUICtrlSetState($SelAll_TVItem_suppr, $GUI_EXPAND)
Case $ButtonSuppression
local $aarray_checked_suppr[1]
$count = _GUICtrlTreeView_GetCount($idTreeview_suppr)
For $i = 0 To $count - 2
If _GUICtrlTreeView_GetChecked($idTreeview_suppr, $TVItemsID_Array_suppr[$i]) = True Then
$aarray_checked_suppr[ubound($aarray_checked_suppr) -1] = _GUICtrlTreeView_GetText($idTreeview_suppr, $TVItemsID_Array_suppr[$i])
redim $aarray_checked_suppr[ubound($aarray_checked_suppr)+1]
EndIf
Next
$strComputer = "."
ProgressOn("SUPPRESSION DES IMPRIMANTES ", "Suppression de : ")
for $i = 0 to ubound($aarray_checked_suppr) -1
$j = ($i + 1) * 100 / (ubound($aarray_checked_suppr) -2)
ProgressSet($j, "Suppression de : " & $aarray_checked_suppr[$i])
;_arraydisplay($aarray_checked_suppr)
_PrintMgr_RemovePrinter($aarray_checked_suppr[$i]) ; utilisation de l'UDF <printMgr.au3>
Next
ProgressSet(100, "Suppression terminée")
sleep(1000)
ProgressOff()
$aarray_checked_suppr=""
$aPrinterList_suppr =""
$TVItemsID_Array_suppr=""
dim $TVItemsID_Array_suppr[1]
_GUICtrlTreeView_DeleteAll ($idTreeview_suppr)
$aPrinterList_suppr = _GetLocalPrinterList(@ComputerName)
;_ArrayDisplay($aPrinterList_suppr)
$SelAll_TVItem_suppr = GUICtrlCreateTreeViewItem("Tout selectionner",$idTreeview_suppr)
for $i = 0 to UBound($aPrinterList_suppr) -1
if StringLen($aPrinterList_suppr[$i][0]) = 0 then
$TVItemsID_Array_suppr[$i] = GUICtrlCreateTreeViewItem($aPrinterList_suppr[$i][1], $SelAll_TVItem_suppr)
Else
$TVItemsID_Array_suppr[$i] = GUICtrlCreateTreeViewItem($aPrinterList_suppr[$i][0], $SelAll_TVItem_suppr)
EndIf
GUICtrlSetColor(-1, 0x0000C0)
ReDim $TVItemsID_Array_suppr[ubound($TVItemsID_Array_suppr)+1]
Next
GUICtrlSetState($SelAll_TVItem_suppr, $GUI_EXPAND)
Case $SelAll_TVItem ; sélection de tous les noeuds pour le treeview installation
Local $State = $GUI_UNCHECKED
If BitAND(GUICtrlRead($SelAll_TVItem), $GUI_CHECKED) Then
$State = $GUI_CHECKED
GUICtrlSetColor($SelAll_TVItem, 0x0)
GUICtrlSetState($SelAll_TVItem, $GUI_DEFBUTTON + $GUI_CHECKED)
Else
GUICtrlSetColor($SelAll_TVItem, 0xC0C0C0)
GUICtrlSetState($SelAll_TVItem, $GUI_UNCHECKED)
EndIf
For $a = 0 To UBound($TVItemsID_Array) - 1
GUICtrlSetState($TVItemsID_Array[$a], $State)
Next
case $SelAll_TVItem_suppr ; idem pour les noeuds supression
Local $State = $GUI_UNCHECKED
If BitAND(GUICtrlRead($SelAll_TVItem_suppr), $GUI_CHECKED) Then
$State = $GUI_CHECKED
GUICtrlSetColor($SelAll_TVItem_suppr, 0x0)
GUICtrlSetState($SelAll_TVItem_suppr, $GUI_DEFBUTTON + $GUI_CHECKED)
Else
GUICtrlSetColor($SelAll_TVItem_suppr, 0xC0C0C0)
GUICtrlSetState($SelAll_TVItem_suppr, $GUI_UNCHECKED)
EndIf
For $a = 0 To UBound($TVItemsID_Array_suppr) - 1
GUICtrlSetState($TVItemsID_Array_suppr[$a], $State)
Next
EndSwitch
WEnd
Func _GetLocalPrinterList($computer) ; récupération des imprimantes (locales ou serveur)
Local $PrinterList[1][4], $PrinterCount
Local $objWMIService = ObjGet("winmgmts:\\" & $computer & "\root\CIMV2")
if @error Then
msgbox(64,"Erreur ! (" & @error &")" ,"Veuillez utiliser un compte administrateur sur le domaine pour visulaiser la liste des imprimantes sur le serveur " & $computer ) ; récupération de l'erreur si non autorisé
Return
Else
Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer")
If IsObj($colItems) Then
For $objItem In $colItems
ReDim $PrinterList[$PrinterCount + 1][4]
$sharename = $objItem.ShareName
$PrinterList[$PrinterCount][0] = $objItem.shareName
$PrinterList[$PrinterCount][1] = $objItem.DeviceID
$PrinterCount += 1
Next
Return $PrinterList
EndIf
EndIf
EndFunc ;==>_GetLocalPrinterList
Func test($computer) ; l'ordinateur est il allumé ou sur le réseau ?
Local $ping = Ping($computer, 500)
If $ping = 0 Then
;ConsoleWrite("Ordi : " & $computer & " ms : " & $ping & " erreur : " & @error & @CRLF)
Return False
Else
;consolewrite("Ordi : " & $computer & "ms : " & $ping & " erreur : " & @error & @CRLF)
Return True
EndIf
EndFunc ;==>test
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\Users\0469327\Pictures\Icones\imprimantes.ico
#AutoIt3Wrapper_Outfile=printergui.exe
#AutoIt3Wrapper_Res_Comment=Gestion de l'installation des imprimantes
#AutoIt3Wrapper_Res_Description=Gestion de l'installation des imprimantes
#AutoIt3Wrapper_Res_Fileversion=1.0
#AutoIt3Wrapper_Res_LegalCopyright=
#AutoIt3Wrapper_Res_Language=1036
#AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <array.au3> ; Only for viewing the array.
#include <printMgr.au3>
#include <GuiListView.au3>
#include <GuiTreeView.au3>
;---------------------------PRINTERGUI -----------------------------------------------------------------------------------
;cette application permet de visuliser dans un treeview les imprimantes d'un ordinateur ou d'un serveur
;d'impression distant, de selectionner et d'installer les imprimantes désirées depuis ce serveur.
;Elle permet également de visulaiser les imprimantes installées sur le poste de travail et de les selectionner
;pour suppression. Elle utilise l'UDF <printMgr.au3> pour la suppression.
;l'installation des imprimantes se fait via printui.dll /ga qui permet l'installation d'une imprimante
;pour tous les utilisateurs d'un poste de travail. Necessite des droits administrateur.
;--------------------------------------------------------------------------------------------------------------------------------
;--------------------------------------------------------DECLARATION DES VARIABLES-------------------------------
Global $aPrinterList
Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
Global $g_eventerror = 0
Global $TVItemsID_Array[0]
Global $idTreeview
Global $SelAll_TVItem
Global $version = "1.0.0"
;-------------------------------------------------- CREATION DE LA GUI-------------------------------------------------
#Region ### START Koda GUI section ### Form=C:\DEVAU3\gestion imprimantes gui.kxf
SplashTextOn("PrinterGUI " & $version, "Initialisation Veuillez patienter",300,50) ; splash text d'attende de chagement de la gui
$Form1 = GUICreate("Gestion des imprimantes " & $version, 579, 618, 263, 295)
$Group1 = GUICtrlCreateGroup("Installation des imprimantes", 8, 8, 561, 313)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$LabelServeurImp = GUICtrlCreateLabel("Entrez l'adresse IP ou le nom du serveur d'impression : ", 16, 40, 267, 17)
$printserver = GUICtrlCreateInput("", 16, 64, 249, 21)
$ButtonSuppression = GUICtrlCreateButton("Supprimer les imprimantes ", 24, 368, 145, 41)
$label_installation = GUICtrlCreateLabel("Entrez le nom ou l'@ IP du serveur d'impression puis selectionner les imprimantes à installer",16,150,230,25)
$label_supression = GUICtrlCreateLabel("Sélectionner les imprimantes à supprimer --------->", 16,478,260,41)
;$label_conception =GUICtrlCreateLabel("Marcgforce @ 06/2018", 16,600)
$ButtonQuitter = GUICtrlCreateButton("Quitter", 432, 566, 129, 41)
$ButtonInstallation = GUICtrlCreateButton("Installer" ,144, 96, 121, 25)
GUICtrlSetState($ButtonInstallation, $GUI_DISABLE)
$ButtonVerifier = GUICtrlCreateButton("Verifier ", 16, 96, 113, 25)
$Group2 = GUICtrlCreateGroup("Suppression des imprimantes sur le poste de travail", 8, 328, 561, 231)
GUICtrlCreateGroup("", -99, -99, 1, 1)
;---------------------------------------CREATION DES TREEVIEWS----------------------------------------------------
Global $idTreeview = GUICtrlCreateTreeView(304, 32, 241, 273, BitOR($TVS_HASBUTTONS, $TVS_DISABLEDRAGDROP, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
Global $idTreeview_suppr = GUICtrlCreateTreeView(304, 350, 241, 190, BitOR($TVS_HASBUTTONS, $TVS_DISABLEDRAGDROP, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_CHECKBOXES), $WS_EX_CLIENTEDGE)
dim $TVItemsID_Array_suppr[1]; déclaration du tableau contenant les imprimantes a supprimer
global $SelAll_TVItem_suppr = GUICtrlCreateTreeViewItem("Tout selectionner",$idTreeview_suppr) ; création du noeud permettant la sélection complète
$aPrinterList_suppr = _GetLocalPrinterList(@ComputerName) ; récupération des imprimantes locales dans un tableau pour les imprimantes locales
for $i = 0 to UBound($aPrinterList_suppr) -1
$TVItemsID_Array_suppr[$i] = GUICtrlCreateTreeViewItem($aPrinterList_suppr[$i][1], $SelAll_TVItem_suppr)
GUICtrlSetColor(-1, 0x0000C0)
ReDim $TVItemsID_Array_suppr[ubound($TVItemsID_Array_suppr)+1]
Next
GUICtrlSetState($SelAll_TVItem_suppr, $GUI_EXPAND) ; expension du noeud liste complète
SplashOff() ; fin du message d'attente
GUISetState(@SW_SHOW, $Form1) ; affichage de la gui
GUICtrlSetState($ButtonVerifier, $GUI_DEFBUTTON) ; mise en place du raccourcis clavier (ENTREE) pour le bouton verifier
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $ButtonQuitter
Exit
Case $ButtonVerifier ; traitement lors de l'appui sur le bouton verifier
$TVItemsID_Array = "" ; si le treeview est déjà alimenté il faut le vider
dim $TVItemsID_Array[1] ; pour tou recréer
_GUICtrlTreeView_DeleteAll ($idTreeview) ; suppression du treeview
$print_ip = GUICtrlRead($printserver) ; lecture de l'inputbox
if $print_ip = "" then ; controle de l'inputbox > ""
msgbox(64,"Erreur","Veuillez entrer l'adresse IP ou le nom du serveur d'impression")
Else
local $ping = test($print_ip) ; on teste si c'est un ordinateur
if $ping = true Then
$aPrinterList = _GetLocalPrinterList($print_ip) ; récupération des imprimantes pour l'installation
global $SelAll_TVItem = GUICtrlCreateTreeViewItem("Tout selectionner",$idTreeview); création du noeud pour la sélection totale
for $i = 0 to ubound($aPrinterList) -1
if StringLen($aPrinterList[$i][0]) = 0 then ; si une cellule du tableau est vide (imprimante non partagée)
$TVItemsID_Array[$i] = GUICtrlCreateTreeViewItem($aPrinterList[$i][1], $SelAll_TVItem)
Else
$TVItemsID_Array[$i] = GUICtrlCreateTreeViewItem($aPrinterList[$i][0], $SelAll_TVItem) ;on prend dans la cellume a coté
EndIf
GUICtrlSetColor(-1, 0x0000C0)
ReDim $TVItemsID_Array[ubound($TVItemsID_Array)+1] ; redimensionnement de l'array
Next
GUICtrlSetState($SelAll_TVItem, $GUI_EXPAND)
GUICtrlSetState($ButtonInstallation, $GUI_ENABLE)
Else
msgbox(64,"Erreur","Veuillez entrer l'adresse IP ou le nom du serveur d'impression")
EndIf
EndIf
Case $ButtonInstallation ; installation des imprimantes
local $j=1
local $aarray_checked[1]; création d'un tableau regroupant les imprimantes sélectionnées
$count = _GUICtrlTreeView_GetCount($idTreeview) ; comptage du nombre de noeuds dans le treeview
For $i = 0 To $count - 2
If _GUICtrlTreeView_GetChecked($idTreeview, $TVItemsID_Array[$i]) = True Then ; si la case est cochée
$aarray_checked[ubound($aarray_checked) -1] = _GUICtrlTreeView_GetText($idTreeview,$TVItemsID_Array[$i]) ; on récupère le texte et on le met dans l'array
redim $aarray_checked[ubound($aarray_checked)+1]
EndIf
Next
ProgressOn("INSTALLATION DES IMPRIMANTES ", "Installation de : ") ; petite barre de defilement des installation
for $i = 0 to ubound($aarray_checked)-2 ; lecture de l'array
$j = ($i + 1) * 100 / (ubound($aarray_checked) -2)
ProgressSet($j, "Installation de : " & $aarray_checked[$i])
$print_ip = GUICtrlRead($printserver)
RunWait('C:\WINDOWS\system32\cmd.exe /c "rundll32.exe printui.dll, PrintUIEntry /gd /q /n \\' & $print_ip & '\' & $aarray_checked[$i] & '"', '', @SW_HIDE) ; suppression de l'imprimante si elle existe déjà
sleep(1500) ; sa ça l'installation est trop rapide
RunWait('C:\WINDOWS\system32\cmd.exe /c "rundll32.exe printui.dll, PrintUIEntry /ga /n \\' & $print_ip & '\' & $aarray_checked[$i] & '"', '', @SW_HIDE) ; installation
Next
$aarray_checked = "" ; destruction de l'array
ProgressSet(100,"Installation terminée... nettoyage des fichiers")
sleep(2000)
ProgressOff()
$aarray_checked_suppr=""
$aPrinterList_suppr =""
$TVItemsID_Array_suppr=""
dim $TVItemsID_Array_suppr[1]
_GUICtrlTreeView_DeleteAll ($idTreeview_suppr)
$aPrinterList_suppr = _GetLocalPrinterList(@ComputerName)
;_ArrayDisplay($aPrinterList_suppr)
$SelAll_TVItem_suppr = GUICtrlCreateTreeViewItem("Tout selectionner",$idTreeview_suppr) ; l'idée ici est de rafraichir la liste des imprimantes installées localement
for $i = 0 to UBound($aPrinterList_suppr) -1
if StringLen($aPrinterList_suppr[$i][0]) = 0 then
$TVItemsID_Array_suppr[$i] = GUICtrlCreateTreeViewItem($aPrinterList_suppr[$i][0], $SelAll_TVItem_suppr)
Else
$TVItemsID_Array_suppr[$i] = GUICtrlCreateTreeViewItem($aPrinterList_suppr[$i][1], $SelAll_TVItem_suppr)
EndIf
GUICtrlSetColor(-1, 0x0000C0)
ReDim $TVItemsID_Array_suppr[ubound($TVItemsID_Array_suppr)+1]
Next
GUICtrlSetState($SelAll_TVItem_suppr, $GUI_EXPAND)
Case $ButtonSuppression
local $aarray_checked_suppr[1]
$count = _GUICtrlTreeView_GetCount($idTreeview_suppr)
For $i = 0 To $count - 2
If _GUICtrlTreeView_GetChecked($idTreeview_suppr, $TVItemsID_Array_suppr[$i]) = True Then
$aarray_checked_suppr[ubound($aarray_checked_suppr) -1] = _GUICtrlTreeView_GetText($idTreeview_suppr, $TVItemsID_Array_suppr[$i])
redim $aarray_checked_suppr[ubound($aarray_checked_suppr)+1]
EndIf
Next
$strComputer = "."
ProgressOn("SUPPRESSION DES IMPRIMANTES ", "Suppression de : ")
for $i = 0 to ubound($aarray_checked_suppr) -1
$j = ($i + 1) * 100 / (ubound($aarray_checked_suppr) -2)
ProgressSet($j, "Suppression de : " & $aarray_checked_suppr[$i])
;_arraydisplay($aarray_checked_suppr)
_PrintMgr_RemovePrinter($aarray_checked_suppr[$i]) ; utilisation de l'UDF <printMgr.au3>
Next
ProgressSet(100, "Suppression terminée")
sleep(1000)
ProgressOff()
$aarray_checked_suppr=""
$aPrinterList_suppr =""
$TVItemsID_Array_suppr=""
dim $TVItemsID_Array_suppr[1]
_GUICtrlTreeView_DeleteAll ($idTreeview_suppr)
$aPrinterList_suppr = _GetLocalPrinterList(@ComputerName)
;_ArrayDisplay($aPrinterList_suppr)
$SelAll_TVItem_suppr = GUICtrlCreateTreeViewItem("Tout selectionner",$idTreeview_suppr)
for $i = 0 to UBound($aPrinterList_suppr) -1
if StringLen($aPrinterList_suppr[$i][0]) = 0 then
$TVItemsID_Array_suppr[$i] = GUICtrlCreateTreeViewItem($aPrinterList_suppr[$i][1], $SelAll_TVItem_suppr)
Else
$TVItemsID_Array_suppr[$i] = GUICtrlCreateTreeViewItem($aPrinterList_suppr[$i][0], $SelAll_TVItem_suppr)
EndIf
GUICtrlSetColor(-1, 0x0000C0)
ReDim $TVItemsID_Array_suppr[ubound($TVItemsID_Array_suppr)+1]
Next
GUICtrlSetState($SelAll_TVItem_suppr, $GUI_EXPAND)
Case $SelAll_TVItem ; sélection de tous les noeuds pour le treeview installation
Local $State = $GUI_UNCHECKED
If BitAND(GUICtrlRead($SelAll_TVItem), $GUI_CHECKED) Then
$State = $GUI_CHECKED
GUICtrlSetColor($SelAll_TVItem, 0x0)
GUICtrlSetState($SelAll_TVItem, $GUI_DEFBUTTON + $GUI_CHECKED)
Else
GUICtrlSetColor($SelAll_TVItem, 0xC0C0C0)
GUICtrlSetState($SelAll_TVItem, $GUI_UNCHECKED)
EndIf
For $a = 0 To UBound($TVItemsID_Array) - 1
GUICtrlSetState($TVItemsID_Array[$a], $State)
Next
case $SelAll_TVItem_suppr ; idem pour les noeuds supression
Local $State = $GUI_UNCHECKED
If BitAND(GUICtrlRead($SelAll_TVItem_suppr), $GUI_CHECKED) Then
$State = $GUI_CHECKED
GUICtrlSetColor($SelAll_TVItem_suppr, 0x0)
GUICtrlSetState($SelAll_TVItem_suppr, $GUI_DEFBUTTON + $GUI_CHECKED)
Else
GUICtrlSetColor($SelAll_TVItem_suppr, 0xC0C0C0)
GUICtrlSetState($SelAll_TVItem_suppr, $GUI_UNCHECKED)
EndIf
For $a = 0 To UBound($TVItemsID_Array_suppr) - 1
GUICtrlSetState($TVItemsID_Array_suppr[$a], $State)
Next
EndSwitch
WEnd
Func _GetLocalPrinterList($computer) ; récupération des imprimantes (locales ou serveur)
Local $PrinterList[1][4], $PrinterCount
Local $objWMIService = ObjGet("winmgmts:\\" & $computer & "\root\CIMV2")
if @error Then
msgbox(64,"Erreur ! (" & @error &")" ,"Veuillez utiliser un compte administrateur sur le domaine pour visulaiser la liste des imprimantes sur le serveur " & $computer ) ; récupération de l'erreur si non autorisé
Return
Else
Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer")
If IsObj($colItems) Then
For $objItem In $colItems
ReDim $PrinterList[$PrinterCount + 1][4]
$sharename = $objItem.ShareName
$PrinterList[$PrinterCount][0] = $objItem.shareName
$PrinterList[$PrinterCount][1] = $objItem.DeviceID
$PrinterCount += 1
Next
Return $PrinterList
EndIf
EndIf
EndFunc ;==>_GetLocalPrinterList
Func test($computer) ; l'ordinateur est il allumé ou sur le réseau ?
Local $ping = Ping($computer, 500)
If $ping = 0 Then
;ConsoleWrite("Ordi : " & $computer & " ms : " & $ping & " erreur : " & @error & @CRLF)
Return False
Else
;consolewrite("Ordi : " & $computer & "ms : " & $ping & " erreur : " & @error & @CRLF)
Return True
EndIf
EndFunc ;==>test