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