Jump to content

Problem with object definition.

Recommended Posts

Hello everyone.

I created script to click trough application (version 6.0.1).

Script clicked all objects in the application successfully.

But after I have reinstalled application (installed version 6.0.2), my script cannot run.

Object description changed from "Class:WindowsForms10.COMBOBOX.app.0.23beec7" to "Class:WindowsForms10.COMBOBOX.app.0.f68d0b"

How can I avoid this?

How can I make my script runable on different versions?

Link to comment
Share on other sites

With .net application 'f68d0b' this part of the class will change every time a new version of the application is created. The good news is that this value will be the same for all .net windows and controls in the application so you can put the value in a global variable and use it like this

Global $g_sAppId = "f68d0b"

 "Class:WindowsForms10.COMBOBOX.app.0." & $g_sAppId

Additionally if the is a .net control that is always in the same position you can get the class using coordinates and populate the appid variable whenyour script starts.


Local $sAppId = ''

    $sCurClassnn = _arc_CtrlGetClassNN_ByPos("My window title", $sAppId ,10, 10)
    If Not ($sAppId = '') Then
        $g_sAppId = $sAppId

Func _CtrlGetClassNN_ByPos($sCaption, ByRef $sNetAppID_Out, $iX = -999, $iY = -999, $sClass_In = '' )
    Local $sClassList = ''
    Local $hWin = 0
    Local $aCtrlPos = 0 
    Local $sReturn = ''
    Local $Classnn = ''
    Local $MinW = 9999
    Local $MinH = 9999
    Local $aMPos = 0
    Local $OptMCM = 0
    Local $sSplitClass[2]
    Local $nCount = 0
    Local $aApp = 0
    WinWait($sCaption, "")
    If Not WinActive($sCaption, "") Then WinActivate($sCaption, "")
    WinWaitActive($sCaption, "")

    $hWin = WinGetHandle($sCaption)
    If $sClass_In = '' Then
        $sClassList = WinGetClassList($hWin)
        $sSplitClass = StringSplit(StringTrimRight($sClassList, 1), @LF)
        $sSplitClass[1] = $sClass_In
        $sSplitClass[0] = 1
    If $iX = -999 Or $iY = -999 Then
        $OptMCM = Opt('MouseCoordMode', 2)
        $aMPos = MouseGetPos()
        Opt('MouseCoordMode', $OptMCM)
    For $iCount = 1 To $sSplitClass[0]
        $nCount = 0
        While 1
            $nCount += 1
            $Classnn = $sSplitClass[$iCount] & $nCount
            $aCtrlPos = ControlGetPos($hWin, '', $Classnn )
            If @error Then ExitLoop
            If $aMPos[0] >= $aCtrlPos[0] And $aMPos[0] <= ($aCtrlPos[0] + $aCtrlPos[2]) _
                And $aMPos[1] >= $aCtrlPos[1] And $aMPos[1] <= ($aCtrlPos[1] + $aCtrlPos[3]) Then
                ; Check if the control is coincident or inside a previously indentified control, assuming 
                ; that we want the smallest control that the mouse coords are within.
                If $sSplitClass[$iCount] <> '' And $aCtrlPos[2] <= $MinW And $aCtrlPos[3] <= $MinH Then
                    ; check that the control is not hidden underneath another control.
                    If ControlCommand ( $sCaption, "", $Classnn, "IsVisible") Then
                        ; set new smallest size identified
                        $MinW = $aCtrlPos[2] 
                        $MinH = $aCtrlPos[3] 
                        $aApp = StringRegExp($sSplitClass[$iCount], "(?:app\.)(.+$)", 3)
                        If IsArray($aApp) Then 
                            $sNetAppID_Out = $aApp[0]
                            $sNetAppID_Out = ''
                        $sReturn = $Classnn
    Return $sReturn

Edit: Had parameters in wrong order

Edited by Bowmore

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to build bigger and better idiots. So far, the universe is winning."- Rick Cook

Link to comment
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

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Create New...