FUNCTION ADDPRINTER($PORT,$PRINTERTYPE,OPTIONAL $DRIVERINF,$DRIVERNAME,$UNVNAME,$PRINTERDESC,$PORTNUMBERKEY,$PRINTERKEY,$PRINTERDLL,$PROTOCOLKEY,$QUEUEKEY,$SNMPENABLED,$REMOTEPC,$DEFAULT)
DIM $QUITLOOP,$IPPRINTERKEY,$PRINTERCMD
$ADDPRINTER=0
$ADDQUEUE=0
$PRINTERPROCINSTALL="NO"
? "Starting Add Printer..." ?
? "PORT: " $PORT
? "PRINTERTYPE: " $PRINTERTYPE
? "DRIVERINF: " $DRIVERINF
? "DRIVERNAME: " $DRIVERNAME
? "UNIVERSALNAME: " $UNVNAME
? "PRINTERDESC: " $PRINTERDESC
? "PORTNUMBERKEY: " $PORTNUMBERKEY
? "PRINTERKEY: " $PRINTERKEY
? "PRINTERDLL: " $PRINTERDLL
? "PROTOCOLKEY: " $PROTOCOLKEY
? "QUEUEKEY: " $QUEUEKEY
? "SNMPENABLED: " $SNMPENABLED
? "REMOTEPC: " $REMOTEPC
? "DEFAULT: " $DEFAULT ?
IF NOT LEFT($PORT,2)="\\"
IF $DRIVERINF=""
? "Using Built-In Windows Drivers"
$DRIVERINF="%WINDIR%\INF\NTPRINT.INF"
ENDIF
IF NOT EXIST($DRIVERINF)
? "INF File Does Not Exist!"
EXIT -3
ENDIF
? "Parsing INF File..."
SHELL '%COMSPEC% /C TYPE "$DRIVERINF">%TEMP%\ADDPRINTER.TXT'
IF OPEN(3,"%TEMP%\ADDPRINTER.TXT",0)=0
$QUITLOOP=0
IF $VISTA32="YES" OR $VISTA64="YES"
WHILE @ERROR=0 AND $QUITLOOP=0
$LINE=READLINE(3)
IF $UNVNAME=""
$QUITLOOP=INSTR($LINE,$PRINTERTYPE)
ELSE
$QUITLOOP=INSTR($LINE,$UNVNAME)
ENDIF
LOOP
ELSE
WHILE @ERROR=0 AND $QUITLOOP=0
$LINE=READLINE(3)
$QUITLOOP=INSTR($LINE,$PRINTERTYPE)
LOOP
ENDIF
$=CLOSE(3)
IF $QUITLOOP=0
EXIT -2
ENDIF
ELSE
EXIT -3
ENDIF
ENDIF
IF $PRINTERDESC=""
$PRINTERDESC=$DRIVERNAME
ENDIF
IF $REMOTEPC=""
$REMOTEPC='\\'+ @WKSTA
ELSE
IF NOT LEFT($REMOTEPC,2)="\\"
$REMOTEPC='\\' + $REMOTEPC
ENDIF
ENDIF
SELECT
CASE LEFT($PORT,2)="\\"
$PRINTSERVER=1
$PRINTERDESC=$PORT
CASE INSTR($PORT,".")
$REGFILE="C:\NETWORK\PRINTERWIZ.REG"
IF EXIST ($REGFILE)
DEL ($REGFILE)
ENDIF
OPEN(3,$REGFILE,5)
$=WRITELINE(3,"Windows Registry Editor Version 5.00"+@CRLF)
$=WRITELINE(3,@CRLF)
$=WRITELINE(3,"[-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\"+$PORT+"]"+@CRLF)
CLOSE(3)
? "Removing Existing Port Keys..."
IF $VISTA32="YES" OR $VISTA64="YES"
SHELL '%COMSPEC% /C C:\NETWORK\ELEVATE.CMD REGEDIT /S $REGFILE'
ELSE
SHELL '%COMSPEC% /C REGEDIT /S $REGFILE'
ENDIF
SLEEP 3
? "Done Removing Existing Port Keys..."
IF EXIST ($REGFILE)
DEL ($REGFILE)
ENDIF
SLEEP 3
? "Creating New Registry File..."
IF $VISTA32="YES" OR $VISTA64="YES"
$IPPRINTERKEY='$REMOTEPC\$HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\PRINT\MONITORS\STANDARD TCP/IP PORT\PORTS\' +$PORT
? "Creating Print Port Registry File For Vista"
OPEN(3,$REGFILE,5)
$=WRITELINE(3,"Windows Registry Editor Version 5.00"+@CRLF)
$=WRITELINE(3,@CRLF)
$=WRITELINE(3,"[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\"+$PORT+"]"+@CRLF)
$=WRITELINE(3,CHR(34)+"Double Spool"+CHR(34)+"=dword:00000001"+@CRLF)
$=WRITELINE(3,CHR(34)+"HostName"+CHR(34)+"="+CHR(34)+$PORT+CHR(34)+@CRLF)
$=WRITELINE(3,CHR(34)+"HWAddress"+CHR(34)+"="+CHR(34)+CHR(34)+@CRLF)
$=WRITELINE(3,CHR(34)+"IPAddress"+CHR(34)+"="+CHR(34)+CHR(34)+@CRLF)
$=WRITELINE(3,CHR(34)+"PortMonMibPortIndex"+CHR(34)+"=dword:00000000"+@CRLF)
$=WRITELINE(3,CHR(34)+"PortNumber"+CHR(34)+"=dword:00000203"+@CRLF)
$=WRITELINE(3,CHR(34)+"Protocol"+CHR(34)+"=dword:00000002"+@CRLF)
$=WRITELINE(3,CHR(34)+"Queue"+CHR(34)+"="+CHR(34)+"RAW"+CHR(34)+@CRLF)
$=WRITELINE(3,CHR(34)+"SNMP Community"+CHR(34)+"="+CHR(34)+"public"+CHR(34)+@CRLF)
$=WRITELINE(3,CHR(34)+"SNMP Enabled"+CHR(34)+"=dword:00000001"+@CRLF)
$=WRITELINE(3,CHR(34)+"SNMP Index"+CHR(34)+"=dword:00000001"+@CRLF)
$=WRITELINE(3,CHR(34)+"Version"+CHR(34)+"=dword:00000002"+@CRLF)
? "Creating Printer Processor Registry File For Vista"
IF $PRINTERKEY<>""
? "PRINTERKEY: " $PRINTERKEY
IF $OSBIT="64 Bit"
$PRINTPROCOS="WINDOWS x64"
$PRINTPROCREGKEY='$REMOTEPC\$HKLM\$SYSCCS\CONTROL\PRINT\ENVIRONMENTS\WINDOWS x64\PRINT PROCESSORS\'+$PRINTERKEY
ELSE
$PRINTPROCOS="WINDOWS NT x86"
$PRINTPROCREGKEY='$REMOTEPC\$HKLM\$SYSCCS\CONTROL\PRINT\ENVIRONMENTS\WINDOWS NT x86\PRINT PROCESSORS\'+$PRINTERKEY
ENDIF
$=WRITELINE(3,@CRLF)
$=WRITELINE(3,"["+$HKLM+"\SYSTEM\CurrentControlSet\Control\Print\Environments\"+$PRINTPROCOS+"\Print Processors\"+$PRINTERKEY+"]"+@CRLF)
$=WRITELINE(3,CHR(34)+"Driver"+CHR(34)+"="+CHR(34)+$PRINTERDLL+CHR(34)+@CRLF)
;$PRINTERPROCINSTALL="YES"
;$POPUPALERTMESSAGE1=""
;$POPUPALERTMESSAGE2=""
;$POPUPALERTMESSAGE3=""
;$POPUPALERTMESSAGE4=""
;$POPUPALERTMESSAGE5=""
;$FORMMAIN.MOUSEPOINTER=0
;ALERTMESSAGES()
ENDIF
? "Writing Registry File..."
CLOSE(3)
? "Closing Registry File..."
ELSE
$IPPRINTERKEY='$REMOTEPC\$HKLM\SYSTEM\CURRENTCONTROLSET\CONTROL\PRINT\MONITORS\STANDARD TCP/IP PORT\PORTS\IP_' +$PORT
? "Creating Print Port Registry File For XP"
OPEN(3,$REGFILE,5)
$=WRITELINE(3,"Windows Registry Editor Version 5.00"+@CRLF)
$=WRITELINE(3,@CRLF)
$=WRITELINE(3,"[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports\IP_"+$PORT+"]"+@CRLF)
$=WRITELINE(3,CHR(34)+"Double Spool"+CHR(34)+"=dword:00000001"+@CRLF)
$=WRITELINE(3,CHR(34)+"HostName"+CHR(34)+"="+CHR(34)+CHR(34)+@CRLF)
$=WRITELINE(3,CHR(34)+"HWAddress"+CHR(34)+"="+CHR(34)+CHR(34)+@CRLF)
$=WRITELINE(3,CHR(34)+"IPAddress"+CHR(34)+"="+CHR(34)+$PORT+CHR(34)+@CRLF)
$=WRITELINE(3,CHR(34)+"PortNumber"+CHR(34)+"=dword:00000203"+@CRLF)
$=WRITELINE(3,CHR(34)+"Protocol"+CHR(34)+"=dword:00000002"+@CRLF)
$=WRITELINE(3,CHR(34)+"Queue"+CHR(34)+"="+CHR(34)+"RAW"+CHR(34)+@CRLF)
$=WRITELINE(3,CHR(34)+"SNMP Community"+CHR(34)+"="+CHR(34)+"public"+CHR(34)+@CRLF)
$=WRITELINE(3,CHR(34)+"SNMP Enabled"+CHR(34)+"=dword:00000001"+@CRLF)
$=WRITELINE(3,CHR(34)+"SNMP Index"+CHR(34)+"=dword:00000001"+@CRLF)
$=WRITELINE(3,CHR(34)+"Version"+CHR(34)+"=dword:00000001"+@CRLF)
? "Creating Printer Processor Registry File For XP"
IF $PRINTERKEY<>""
? "PRINTERKEY: " $PRINTERKEY
IF $OSBIT="64 Bit"
$PRINTPROCOS="WINDOWS x64"
$PRINTPROCREGKEY='$REMOTEPC\$HKLM\$SYSCCS\CONTROL\PRINT\ENVIRONMENTS\WINDOWS x64\PRINT PROCESSORS\'+$PRINTERKEY
ELSE
$PRINTPROCOS="WINDOWS NT x86"
$PRINTPROCREGKEY='$REMOTEPC\$HKLM\$SYSCCS\CONTROL\PRINT\ENVIRONMENTS\WINDOWS NT x86\PRINT PROCESSORS\'+$PRINTERKEY
ENDIF
$=WRITELINE(3,@CRLF)
$=WRITELINE(3,"["+$HKLM+"\SYSTEM\CurrentControlSet\Control\Print\Environments\"+$PRINTPROCOS+"\Print Processors\"+$PRINTERKEY+"]"+@CRLF)
$=WRITELINE(3,CHR(34)+"Driver"+CHR(34)+"="+CHR(34)+$PRINTERDLL+CHR(34)+@CRLF)
;$PRINTERPROCINSTALL="YES"
;$POPUPALERTMESSAGE1=""
;$POPUPALERTMESSAGE2=""
;$POPUPALERTMESSAGE3=""
;$POPUPALERTMESSAGE4=""
;$POPUPALERTMESSAGE5=""
;$FORMMAIN.MOUSEPOINTER=0
;ALERTMESSAGES()
ENDIF
? "Writing Registry File..."
CLOSE(3)
? "Closing Registry File..."
ENDIF
? "IPPRINTERKEY: " $IPPRINTERKEY
? "Installing New Printer Port..."
IF $VISTA32="YES" OR $VISTA64="YES"
SHELL '%COMSPEC% /C C:\NETWORK\ELEVATE.CMD REGEDIT /S $REGFILE'
ELSE
SHELL '%COMSPEC% /C REGEDIT /S $REGFILE'
ENDIF
$OBJECTS=GETOBJECT("WINMGMTS:{IMPERSONATIONLEVEL=IMPERSONATE}!"+$REMOTEPC+"\ROOT\CIMV2")
IF NOT @ERROR=0
EXIT -4
ENDIF
$SERVICES=$OBJECTS.EXECQUERY('Select * from Win32_Service WHERE Name = "Spooler"')
FOR EACH $SPOOLER IN $SERVICES
IF $VISTA32="YES" OR $VISTA64="YES"
SHELL '%COMSPEC% /C C:\NETWORK\ELEVATE.CMD NET STOP "Print Spooler" >NUL'
ELSE
$=EXECUTE('$$=$$SPOOLER.STOPSERVICE()')
ENDIF
NEXT
SLEEP 3
FOR EACH $SPOOLER IN $SERVICES
IF $VISTA32="YES" OR $VISTA64="YES"
SHELL '%COMSPEC% /C C:\NETWORK\ELEVATE.CMD NET START "Print Spooler" >NUL'
ELSE
$=EXECUTE('$$=$$SPOOLER.STARTSERVICE()')
ENDIF
NEXT
SLEEP 3
IF $VISTA32="YES" OR $VISTA64="YES"
$PORT='$PORT'
ELSE
$PORT='IP_$PORT'
ENDIF
CASE UCASE(LEFT($PORT,3))="LPT" OR UCASE(LEFT($PORT,3))="COM"
IF NOT RIGHT($PORT,1)=":"
$PORT=$PORT+":"
ENDIF
IF NOT VAL(LEFT(RIGHT($PORT,2),1))>=1
EXIT -1
ENDIF
CASE UCASE(LEFT($PORT,4))="FILE"
IF NOT RIGHT($PORT,1)=":"
$PORT=$PORT+":"
ENDIF
CASE 1
EXIT -1
ENDSELECT
? "PORT: " $PORT
? "PRINTERTYPE: " $PRINTERTYPE
? "DRIVERINF: " $DRIVERINF
? "DRIVERNAME: " $DRIVERNAME
? "PRINTERDESC: " $PRINTERDESC
? "PORTNUMBERKEY: " $PORTNUMBERKEY
? "PRINTERKEY: " $PRINTERKEY
? "PRINTERDLL: " $PRINTERDLL
? "PROTOCOLKEY: " $PROTOCOLKEY
? "QUEUEKEY: " $QUEUEKEY
? "SNMPENABLED: " $SNMPENABLED
? "REMOTEPC: " $REMOTEPC
? "DEFAULT: " $DEFAULT
IF NOT $PRINTSERVER=1
$PRINTERCMD='RUNDLL32 PRINTUI.DLL,PrintUIEntry /if /b "$PRINTERDESC" /c "$REMOTEPC" /f "$DRIVERINF" /r "$PORT" /m "$PRINTERTYPE" /z'
? "PRINTERCMD: " $PRINTERCMD
IF $VISTA32="YES" OR $VISTA64="YES"
SHELL '%COMSPEC% /C C:\NETWORK\ELEVATE.CMD $PRINTERCMD'
ELSE
SHELL $PRINTERCMD
ENDIF
ELSE
IF NOT ADDPRINTERCONNECTION($PORT)=0
EXIT @ERROR
ENDIF
ENDIF
IF $DEFAULT=1
IF NOT SETDEFAULTPRINTER($PRINTERDESC)=0
EXIT @ERROR
ENDIF
ENDIF
$ADDPRINTER=1
? "Done Removing Existing Port Keys..."
IF EXIST ($REGFILE)
DEL ($REGFILE)
ENDIF
MESSAGESTATUS("Finishing Installing Printer - Select Another Printer Or Quit",BLUE)
$FORMMAIN.MOUSEPOINTER=0
ENDFUNCTION