jakewalk Posted October 20, 2008 Share Posted October 20, 2008 Hi, I am trying to register a network printer. The following command works perfectly in the vista commandline: rundll32 printui.dll,PrintUIEntry /if /b "HP LaserJet 2100 Series PS" /f %windir%\inf\ntprint.inf /r "LaserJetPort" /m "HP LaserJet 2100 Series PS" I tried to execute the above commandline with AutoIt the following way: Run('rundll32.exe printui.dll,PrintUIEntry /if /b "HP LaserJet 2100 Series PS" /f %windir%\inf\ntprint.inf /r "LaserJetPort" /m "HP LaserJet 2100 Series PS"'); But the AutoIt-command fails with an error 0x00000003. How can I determine what the problem is? As it is working in the command line I assume that there is something wrong with the quotation marks. Any hints? Regards, jakewalk Link to comment Share on other sites More sharing options...
BrettF Posted October 20, 2008 Share Posted October 20, 2008 Welcome to the forums. When I run this code, I get a message (from the install operation) that the operation could not be completed. I'm not sure, but I think the problem could be where you use the /r switch. Otherwise there is nothing wrong with the quotes. Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version! Link to comment Share on other sites More sharing options...
oMBRa Posted October 20, 2008 Share Posted October 20, 2008 try this ( im not sure ) Run("rundll32.exe printui.dll","PrintUIEntry /if /b HP LaserJet 2100 Series PS /f %windir%\inf\ntprint.inf /r LaserJetPort /m HP LaserJet 2100 Series PS"); Link to comment Share on other sites More sharing options...
BrettF Posted October 20, 2008 Share Posted October 20, 2008 try this ( im not sure ) Run("rundll32.exe printui.dll","PrintUIEntry /if /b HP LaserJet 2100 Series PS /f %windir%\inf\ntprint.inf /r LaserJetPort /m HP LaserJet 2100 Series PS");That won't work. You can't set the Working Dir to be the parameters.... Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version! Link to comment Share on other sites More sharing options...
jakewalk Posted October 20, 2008 Author Share Posted October 20, 2008 Thanks both of you for the very fast reply. @Brettf: When I paste the first code into a commandline window it works flawlessly. So the /r switch shouldn't be the problem. When I run the second code from within autoit, I get the same message as you. The commandline should be correct, but the Autoit-code probably isn't. @oMBra: When I run your code, nothing happens. The run()-function returns a "0", and @error contained a "0", too. Regards, jakewalk Link to comment Share on other sites More sharing options...
jakewalk Posted October 20, 2008 Author Share Posted October 20, 2008 I did another search on the forum and found this thread which concerns exactly the same problem.Both suggested solutions don't work for me. The only change is that I don't get the installer error message, but the printer isn't installed. Hmpf.Regards,jakewalk Link to comment Share on other sites More sharing options...
Bert Posted October 20, 2008 Share Posted October 20, 2008 (edited) I made this tool for installing network printers that are on a print server. You can use it as is, or tweak it to your taste. expandcollapse popup#cs Network Printer Utility 1.0 beta Designed by the CTS Script team 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() ;restarts the print spooler. 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 Edited October 20, 2008 by Volly The Vollatran project  My blog: http://www.vollysinterestingshit.com/ Link to comment Share on other sites More sharing options...
BrettF Posted October 20, 2008 Share Posted October 20, 2008 migth be a problem with expanding %windir% $cmd='rundll32.exe printui.dll,PrintUIEntry /if /b "HP LaserJet 2100 Series PS" /f %windir%\inf\ntprint.inf /r "LaserJetPort" /m "HP LaserJet 2100 Series PS"' MsgBox(0,"watch the windir spec",$cmd) Opt("ExpandEnvStrings", 1) ;0=don't expand, 1=do expand MsgBox(0,"watch the windir spec",$cmd)Works.... Kinda... Opt("ExpandEnvStrings", 1) $cmd='rundll32.exe printui.dll,PrintUIEntry /if /b "HP LaserJet 2100 Series PS" /f %windir%\inf\ntprint.inf /r "LaserJetPort" /m "HP LaserJet 2100 Series PS"' Run ($cmd) Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version! Link to comment Share on other sites More sharing options...
jakewalk Posted October 29, 2008 Author Share Posted October 29, 2008 Works.... Kinda... Opt("ExpandEnvStrings", 1) $cmd='rundll32.exe printui.dll,PrintUIEntry /if /b "HP LaserJet 2100 Series PS" /f %windir%\inf\ntprint.inf /r "LaserJetPort" /m "HP LaserJet 2100 Series PS"' Run ($cmd)Thanks BrettF, that works perfectly. I had to add a Sleep(5000) after the registry changes, otherwise the rundll32-process would fail, because Windows didn't finish the spooler restart. Is it possible to tell the following dos commands to run hidden and wait to continue with the following commands? _RunDOS("NET STOP spooler") _RunDOS("NET START spooler") Link to comment Share on other sites More sharing options...
BrettF Posted October 29, 2008 Share Posted October 29, 2008 There is a services UDF, maybe make it a bit neater/faster/I dunnoo...? Vist my blog!UDFs: Opens The Default Mail Client | _LoginBox | Convert Reg to AU3 | BASS.au3 (BASS.dll) (Includes various BASS Libraries) | MultiLang.au3 (Multi-Language GUIs!)Example Scripts: Computer Info Telnet Server | "Secure" HTTP Server (Based on Manadar's Server)Software: AAMP- Advanced AutoIt Media Player | WorldCam | AYTU - Youtube Uploader Tutorials: Learning to Script with AutoIt V3Projects (Hardware + AutoIt): ArduinoUseful Links: AutoIt 1-2-3 | The AutoIt Downloads Section: | SciTE4AutoIt3 Full Version! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now