Sign in to follow this  
Followers 0
tcox8

Can't get ControlID from Windows Dialog

13 posts in this topic

#1 ·  Posted (edited)

Hello all,

I am making a simple script that requires me to select the "Remember my credentials" checkbox on the "Windows Security" box that pops up when mapping a network location. This checkbox however does not show up in the Window Info tool like the other controls do.

I have read through many posts today trying to figure this out but seems not many people have issues like this. Does anyone have an idea how to get this control ID?

Thanks!

screenshot: http://imageshack.us/photo/my-images/96/examplerq.png/

Edited by tcox8

"There are only 10 types of people in the world: Those who understand binary, and those who don't"

Share this post


Link to post
Share on other sites



Are you just not getting the ID for the control? The CLASSNN can also be used to use the control

Share this post


Link to post
Share on other sites

Yes i Know about the ClassNN, however there is no info for the checkbox using the windows Info tool. I can get the class, instance, and classnamNN of the 2 edit boxes and 2 buttons but nothing shows up for the checkbox.


"There are only 10 types of people in the world: Those who understand binary, and those who don't"

Share this post


Link to post
Share on other sites

Yea, i just tried this on a Virtual Machine and the checkbox is not being captured...Have you tried Spy++ ?

Share this post


Link to post
Share on other sites

Have you tried:

Send ("{TAB}")
Send ("{SPACE}")

I do not prefer this way as it is quite unstable.

Yea, i just tried this on a Virtual Machine and the checkbox is not being captured...Have you tried Spy++ ?

I have not used this (nor have I heard of it!) I do have access to visual studios so I will have to download it and see if that helps. Thanks for the tip!

"There are only 10 types of people in the world: Those who understand binary, and those who don't"

Share this post


Link to post
Share on other sites

Ok, i just tried it with Spy++ with the same result. I think the suggestion Country73 will be your best bet. I know i have had issues with certain windows security popups before when it comes to automation. Im sure you can focus the popup and tab through and select without issue

Share this post


Link to post
Share on other sites

I appreciate the help! I made do with using ControlSend to tab down. Hopefully that will be more stable :)


"There are only 10 types of people in the world: Those who understand binary, and those who don't"

Share this post


Link to post
Share on other sites

Yes this would work on a normal network location, however I am mapping to a print queue. I tried the DriveMapAdd and it did not work. :)


"There are only 10 types of people in the world: Those who understand binary, and those who don't"

Share this post


Link to post
Share on other sites

#11 ·  Posted (edited)

You don't use DriveMapAdd for that. Is this for Novell Print queues or Windows shared printers? If for windows I have an old script that may help. IT will need to be tweaked a bit to run correctly (I haven't ran it in a LONG time) but the core of it shows you how to map printers via command line.

#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 <GuiConstants.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 & "rootcimv2")
    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 & "rootcimv2")
    $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& " /nva017f1a19_4200_82.248_PCL")

;&&&&

;deletes a printer
;Run(@SystemDir & "RUNDLL32 PRINTUI.DLL,PrintUIEntry /gd /c" [email="&@ComputerName"]&@ComputerName[/email]& " /nva017f1a19_4200_82.248_PCL")
;_rundos("NET STOP spooler")
;_rundos("NET START spooler")
; #ce
Edited by MPH

Share this post


Link to post
Share on other sites

Hmm, I played around with PrintUI.dll before but I am unable to get it to map the printer with the network logon credentials that are required.


"There are only 10 types of people in the world: Those who understand binary, and those who don't"

Share this post


Link to post
Share on other sites

Just FYI to anyone needing this:

I just bypassed the credentials box by forcing the credentials into the credential manager first using "cmdkey.exe" After that I was able to use "Start serverprinter" to add the networked printer without the need to enter the credentials.

Works very well for what I need it to. Thanks everyone!


"There are only 10 types of people in the world: Those who understand binary, and those who don't"

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0