noverley Posted November 3, 2008 Share Posted November 3, 2008 I am having problems with Window Titles and Text. I have a window with a partial title of "Connect to Printer" that has the following visible text: OK Windows cannot connect to the printer. The network address is invalid If my code reads If WinExists("Connect to Printer", "OK") It works as expected, but if my code reads If WinExists("Connect to Printer", "Windows cannot connect to") It doesn't . The reason that I need to be more specific is because depending on the situation, I could have two windows that are only different by the second line of visible text. I hope this makes sense. Thanks! Link to comment Share on other sites More sharing options...
Marlo Posted November 3, 2008 Share Posted November 3, 2008 Maybe try using this line of code: Opt("WinTitleMatchMode", 2) Click here for the best AutoIt help possible.Currently Working on: Autoit RAT Link to comment Share on other sites More sharing options...
noverley Posted November 3, 2008 Author Share Posted November 3, 2008 (edited) Yeah, I did try that with no luck. I've tried checking for proper capitalization and everything is correct there. Maybe I'm not using WinExists correctly. Here is my code. run("RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n \\Server\Printer") Opt("WinTitleMatchMode", 2) WinWait("Connecting to") While WinExists("Connecting to", "") WinWait("Connect to Printer", "") If WinExists("Connect to Printer", "Windows cannot connect to the printer") Then WinActivate("Connect to Printer", "Windows cannot connect to the printer") ControlClick("Connect to Printer", "Windows cannot connect to the printer", "Button 1") Exit ElseIf WinExists("Connect to Printer", "You are about to connect to a printer") Then WinActivate("Connect to Printer", "You are about to connect to a printer") ControlClick("Connect to Printer", "You are about to connect to a printer", "Button 1") Exit ElseIf WinExists("Connect to Printer", "The server for the printer does not have the correct printer driver installed") Then WinActivate("Connect to Printer", "The server for the printer does not have the correct printer driver installed") ControlClick("Connect to Printer", "The server for the printer does not have the correct printer driver installed", "Button2") Exit Else Exit EndIf WEnd Thanks Edited November 3, 2008 by noverley Link to comment Share on other sites More sharing options...
madflame991 Posted November 3, 2008 Share Posted November 3, 2008 run("RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n \\Server\Printer") WinWait("Connect to Printer") $hwnd = WinGetHandle("Connect to Printer") $text = WinGetText($hwnd) $text = StringMid($text,StringInStr($text,@LF,0,2)+1) $first8letters = StringLeft($text,8) Switch $first8letters Case "Windows " ControlClick($hwnd,'',2) Case "You are " ControlClick($hwnd,'',2) Case "The serv" ControlClick($hwnd,'',2) EndSwitch I checked and this works for me... by the way use "Auotit v3 info" to see what's the ID of the control... "Button1" was the ClassnameNN... the ID was 2 hope that helps you Game Game Gadget! - read about indie games, gadgets, chiptunes and demoscenesAssembly-like language interpreter and custom machine emulatorSuper Mario Screen Mate - official website or autoit forum pageCogut - Puzzle Game + Editor like sokoban and others Link to comment Share on other sites More sharing options...
noverley Posted November 3, 2008 Author Share Posted November 3, 2008 (edited) It seemed to work, but I just realized that there is the possibility that another window with a different title might pop up. The title is "Hardware Installation". Should the following work? I basically left the title blank for WinGetHandle. I tried it but the ControlClick doesn't get sent to this window. run("RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n \\Server\Printer") WinWait("Connecting to") While WinExists("Connecting to") ;WinWait("Connect to Printer") ;$hwnd = WinGetHandle("Connect to Printer") $hwnd = WinGetHandle("") $text = WinGetText($hwnd) $text = StringMid($text,StringInStr($text,@LF,0,2)+1) $first8letters = StringLeft($text,8) Switch $first8letters Case "Windows " ControlClick($hwnd,'', 2) Case "You are " ControlClick($hwnd,'', 6) Case "The serv" ControlClick($hwnd,'', 2) Case "The soft" ControlClick($hwnd,'', 5303) EndSwitch WEnd Edited November 3, 2008 by noverley Link to comment Share on other sites More sharing options...
Bert Posted November 3, 2008 Share Posted November 3, 2008 I have a tool that will do what you need. Take a look at this script. It is a mass printer installer tool for Windows print servers. It will install the printers on a machine level so that no matter who logs in, they can print. It will also set the default, and delete printers, all in one step.: expandcollapse popup#cs Network Printer Utility 1.0 beta Designed by Volly 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) $_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 The Vollatran project  My blog: http://www.vollysinterestingshit.com/ Link to comment Share on other sites More sharing options...
noverley Posted November 3, 2008 Author Share Posted November 3, 2008 (edited) Thanks for you reply but I'm not sure if it will work for my situation. I am running a Novell network. However, I did get the script working the way I want it to. I just don't know if it is the best way to do it. Here is the script. run("RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n \\Server\Printer") WinWait("Connecting to") While WinExists("Connecting to") If WinExists("Connect to Printer") then $hwnd = WinGetHandle("Connect to Printer") $text = WinGetText($hwnd) $text = StringMid($text,StringInStr($text,@LF,0,2)+1) $first8letters = StringLeft($text,8) Switch $first8letters Case "Windows " ControlClick($hwnd,'', 2) Case "You are " ControlClick($hwnd,'', 6) Case "The serv" ControlClick($hwnd,'', 2) EndSwitch ElseIf WinExists("Hardware Installation") Then ControlClick("Hardware Installation",'',5303) Else EndIf WEnd Edited November 3, 2008 by noverley 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