Here is my take on it. I designed mine to do groups of printers at once. The only thing I couldn't solve is how to install the printer if it was hooked to a Novell server.
#cs
Network Printer Utility 1.0 beta
Designed by Volly and other folks
July 2006
A big THANK YOU goes to big_daddy. His help
was invaluable in fixing some issues.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
History
July 2006: Initial release.
---------------
Known issues:
Will not work on Novell servers.
#ce
#include <GuiConstantsEX.au3>
#include <WindowsConstants.au3>
#include <Process.au3>
#include <Array.au3>
$g_szVersion = "PrintInst.exe"
If WinExists($g_szVersion) Then Exit
Opt("TrayIconDebug", 1);debug is on
Dim $hService, _
$data, _
$sPrinter, _
$sPrinterList, _
$font = "Comic Sans MS", _
$Input[12], $Combo[7], $radio[7], _
$check[11], $Button[6]
Global Enum Step + 25 _
$CON_POS_1 = 25, _
$CON_POS_2, _
$CON_POS_3, _
$CON_POS_4, _
$CON_POS_5, _
$CON_POS_6, _
$CON_POS_7, _
$CON_POS_8, _
$CON_POS_9, _
$CON_POS_10, _
$CON_POS_11
GUICreate("", 600, 290, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
GUICtrlCreateLabel("\\", 20, 54, 10, 20)
$iniread_1 = IniRead(@ScriptDir & "/npu.ini", "SERVER", "SERVER", "")
$iniread_2 = IniRead(@ScriptDir & "/npu.ini", "Printers", "PLIST", "")
iniwrite(@ScriptDir & "/npu.ini", "Printers", "LOCAL", "")
$iniread_3 = IniRead(@ScriptDir & "/npu.ini", "Printers", "LOCAL", "")
$LocalPrinters = StringSplit($iniread_3, "|")
If $LocalPrinters[0] > 10 Then
ReDim $LocalPrinters[11]
EndIf
$Input[1] = GUICtrlCreateInput($iniread_1, 35, 50, 100, 20)
For $i = 2 To 11
$Input[$i] = GUICtrlCreateInput("", 270, Eval("CON_POS_" & $i - 1), 270, 21)
If ($i - 1) <= $LocalPrinters[0]Then
GUICtrlSetData(-1, $LocalPrinters[$i - 1])
EndIf
Next
For $i = 1 To 6
$Combo[$i] = GUICtrlCreateCombo("", 20, Eval("CON_POS_" & $i + 2), 170, 21)
GUICtrlSetData(-1, $iniread_2)
$radio[$i] = GUICtrlCreateRadio("", 210, Eval("CON_POS_" & $i + 2), 15, 21)
Next
For $i = 1 To 10
$check[$i] = GUICtrlCreateCheckbox("", 550, Eval("CON_POS_" & $i), 20, 20)
Next
GUICtrlCreateLabel("Currently install printers", 270, 3, 200, 21)
GUICtrlCreateLabel("Delete", 550, 7, 100, 21)
GUICtrlCreateGroup("Default", 200, 62, 50, 160)
$Button[1] = GUICtrlCreateButton("Run", 20, 225, 35, 30)
$Button[2] = GUICtrlCreateButton("Exit", 65, 225, 35, 30)
$Button[3] = GUICtrlCreateButton("Find", 146, 50, 43, 20)
$Button[4] = GUICtrlCreateButton("Find", 498, 3, 43, 20)
$Button[5] = GUICtrlCreateButton("Restart Spooler", 110, 225, 80, 30)
$Label_1 = GUICtrlCreateLabel(" Network Printer Utility" & @CRLF & "for Windows Print Servers", 20, 0, 240, 50)
GUICtrlSetFont(-1, 10, 400, "", $font)
$Label_2 = GUICtrlCreateLabel("2006 CTS Scripting Team", 40, 270, 130, 25)
$_dummy = GUICtrlCreateDummy()
GUISetState()
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Button[1]
_Rprinter()
_instprint()
MsgBox(0, "", "Done!", 3)
Case $Button[2]
ExitLoop
Case $Button[3]
$data = GUICtrlRead($Input[1], 0)
_netprint1()
Case $Button[4]
_getinstalledPrinters()
Case $Button[5]
_restart()
Case Else
;;;
EndSwitch
WEnd
Exit
Func _netprint1()
$hService = ObjGet("winmgmts:{impersonationLevel=impersonate}!" & "\\" & $data & "\root\cimv2")
If @error Then
MsgBox(48, "ERROR", "No Printers Found. Possible issues: " & @CRLF _
& "" & @CRLF _
& " 1. The Windows Print Server name has been entered in incorrectly." & @CRLF _
& " 2. You are trying to access a Novell Server. This utility does not support Novell Print Servers." & @CRLF _
& " 3. There are no printers shared on the Windows Print Server you selected.")
Else
_np2()
EndIf
EndFunc ;==>_netprint1
Func _np2()
Local $i = 0
Local $sPrinters = ""
Local $aArray[1]
SplashTextOn("", "Gathering printers, please wait...", 150, 75)
For $y = 1 To 6
GUICtrlSetData($Combo[$y], "")
Next
IniWrite(@ScriptDir & "/npu.ini", "Printers", "PLIST", "")
$oPrinterList = $hService.ExecQuery ("Select * From Win32_Printer")
For $oPrinter In $oPrinterList
ReDim $aArray[$i + 1]
$aArray[$i] = StringUpper($oPrinter.name)
$i += 1
Next
_ArraySort($aArray)
For $i = 0 To UBound($aArray)-1
For $y = 1 To 6
GUICtrlSetData($Combo[$y], $aArray[$i])
Next
Next
$iElements = UBound($aArray) - 1
For $x = 0 To $iElements
If $x = $iElements Then
$sPrinters &= $aArray[$x]
Else
$sPrinters &= $aArray[$x] & "|"
EndIf
Next
IniWrite(@ScriptDir & "/npu.ini", "Printers", "PLIST", $sPrinters)
$dataget2 = GUICtrlRead($Input[1], 0)
IniWrite(@ScriptDir & "/npu.ini", "SERVER", "SERVER", $dataget2)
SplashTextOn("", "Select what printers you wish to install", 150, 75)
Sleep(2000)
SplashOff()
EndFunc ;==>_np2
Func _instprint()
Local $ComboGet[7], $RadioGet[7]
SplashTextOn("", "Installing printer, please wait...", 150, 75)
$InputGet = GUICtrlRead($Input[1], 0)
For $i = 1 To 6
$ComboGet[$i] = GUICtrlRead($Combo[$i], 0)
$RadioGet[$i] = GUICtrlRead($radio[$i], 0)
Next
For $i = 1 To 6
If $ComboGet[$i] <> "" Then
RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /ga /c\\" & @ComputerName & " /n\\" & $InputGet & "\" & $ComboGet[$i])
EndIf
Next
_RunDOS("NET STOP spooler")
_RunDOS("NET START spooler")
sleep(10000)
For $i = 1 To 6
If $RadioGet[$i] = 1 Then
If $ComboGet[$i] <> "" Then
RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n\\"&$iniread_1&"\"& $ComboGet[$i])
endif
EndIf
GUICtrlSetData($Combo[$i],"")
GUICtrlSetState($radio[$i], $GUI_UNCHECKED)
sleep(50)
GUICtrlSetData($Combo[$i],$iniread_2)
Next
SplashOff()
EndFunc ;==>_instprint
func _restart()
SplashTextOn("", "Stopping Print Spooler, please wait...", 150, 75)
_RunDOS("NET STOP spooler")
SplashOff()
SplashTextOn("", "Starting Print Spooler, please wait...", 150, 75)
_RunDOS("NET START spooler")
SplashOff()
EndFunc
Func _getinstalledPrinters()
SplashTextOn("", "Gathering installed printers, please wait...", 200, 75)
IniWrite(@ScriptDir & "/npu.ini", "Printers", "LOCAL", "")
$hService = ObjGet("winmgmts:{impersonationLevel=impersonate}!" & "\\" & @ComputerName & "\root\cimv2")
$sPrinterList = $hService.ExecQuery ("Select * From Win32_Printer")
ConsoleWrite('$sPrinterList.count = ' & $sPrinterList.count & @LF)
For $sPrinter In $sPrinterList
ConsoleWrite('$sPrinter.name = ' & $sPrinter.name & @LF)
$rd3 = IniRead(@ScriptDir & "/npu.ini", "Printers", "LOCAL", "")
IniWrite(@ScriptDir & "/npu.ini", "Printers", "LOCAL", $rd3 & $sPrinter.name & "|")
Next
$local = StringSplit(IniRead(@ScriptDir & "/npu.ini", "Printers", "LOCAL", ""), "|")
If UBound($local) < 11 Then ReDim $local[11]
For $i = 1 To 10
GUICtrlSetData($Input[$i + 1], $local[$i])
Next
SplashOff()
EndFunc ;==>_getinstalledPrinters
Func _Rprinter()
Local $InputGet[11]
For $i = 2 To 11
$InputGet[$i - 1] = GUICtrlRead($Input[$i])
Next
For $i = 1 To 10
If GUICtrlRead($check[$i]) = 1 Then
SplashTextOn("", "Removing printer, please wait...", 150, 50)
GUICtrlSetState($check[$i], $GUI_UNCHECKED)
sleep(1000)
If $InputGet[$i] <> "" Then
$str = StringLeft($InputGet[$i], 2)
If $str = "\\" Then
RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /gd /dn /n /c\\" & @ComputerName & " /n" & $InputGet[$i])
;RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /gd /q /c\\" & @ComputerName & " /n" & $InputGet[$i]);mine original
;RunWait(@ComSpec & ' /c RUNDLL32 PRINTUI.DLL,PrintUIEntry /gd /dn /q /n "' & $ret & '"', '', @SW_HIDE);danny35
GUICtrlSetData($InputGet[$i], "")
Else
RunWait(@SystemDir & '\RUNDLL32 PRINTUI.DLL,PrintUIEntry /dl /q /n "' & $InputGet[$i] & '" /c\\' & @ComputerName)
EndIf
EndIf
EndIf
Next
EndFunc ;==>_Rprinter
;#cs - printer install
;adds a printer
;Run(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /ga /c\\" &@ComputerName& " /n\\va017f1a\19_4200_82.248_PCL")
;&&&&
;deletes a printer
;Run(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /gd /c\\" [email="&@ComputerName"]&@ComputerName[/email]& " /n\\va017f1a\19_4200_82.248_PCL")
;_rundos("NET STOP spooler")
;_rundos("NET START spooler")
; #ce