Jump to content

Recommended Posts

JNutt
Posted (edited)

 

image.png.f92c51932f7b4a0db5ba644a6f1e08be.png

 

 

I'm trying to use mouseclick in a panel above.  I want to click on a list item, such as 'Estimated'.  (I've given up on trying to use control click for this).  I'm using window info coordinates from 'Control' tab.

image.png.250ef461ba8ed00b3bee2ba87390272c.png

; click 'Columns'
WinActivate("Innovaya Studio with Sage (Archtectural 2017_V1.invx")
MouseClick("primary", 292, 88, 1, 1)
WinActivate("Select Browsing Properties")
Sleep(1000)
MouseClick("primary", 27, 70, 0,0)
Sleep(2000)
Send("{TAB}{TAB}{TAB}{TAB}{TAB}")
Sleep(1000)
Send("{ENTER}")


ControlClick(

But when I used the code Autoit doesn't click where the coordinates are.  In the scipts it is the second MouseClick that won't work.  Any ideas?

Edited by JNutt

Share this post


Link to post
Share on other sites
Danp2
13 minutes ago, JNutt said:

I've given up on trying to use control click for this

Some additional background details might help here. Also, there are other built-in functions for dealing with listboxes. Have you tried _GUICtrlListBox_SelectString along with _GUICtrlListBox_ClickItem or _GUICtrlListView_SetItemSelected?

  • Thanks 1

Share this post


Link to post
Share on other sites
JNutt

No, I have not tried those.  I'm new to AutoIT so thanks, I'll look at those.

Share this post


Link to post
Share on other sites
JNutt

The app is windows desktop .net.  Someone mentioned before that it may contains a lot of custom widgets, so it seems getting info is difficult.  What other details would be helpful? Like I said I'm a noob here.  Thanks for your help.

I have info from inspect.exe also:

How found:    Focus
RuntimeId:    "[42.3477674.2.2]"
BoundingRectangle:    {l:469 t:404 r:669 b:421}
ProcessId:    11556
ControlType:    UIA_ListItemControlTypeId (0xC357)
LocalizedControlType:    "list item"
Name:    "Estimated"
HasKeyboardFocus:    true
IsKeyboardFocusable:    true
IsEnabled:    true
IsOffscreen:    false
FrameworkId:    "WinForm"
ProviderDescription:    "[pid:11556,hwnd:0x0 Annotation:Microsoft: Annotation Proxy (unmanaged:UIAutomationCore.dll); Main(parent link):Microsoft: ListView Item Proxy (unmanaged:UIAutomationCore.dll)]"
SelectionItem.IsSelected:    true
 

 

Share this post


Link to post
Share on other sites
jdelaney

I'd suggest to not use ui automation efl.  people are too quick to suggest that when the controls are standard ones.   use the ones dan recommended.  use controlgethandle to set the variable to pass into them.


IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window.

Share this post


Link to post
Share on other sites
Earthshine
Posted (edited)

your code does not even compile. I don't see correct ControlClick parameters either. Also, WinForms are not so AutoIt friendly which is precisely why IUIAutomation is useful.

Edited by Earthshine

My resources are limited. You must ask the right questions

 

Share this post


Link to post
Share on other sites
jdelaney

Identifying controls is more complex, but once found, the standard and _gui functions are going to save a ton of time relative the IUIAutomation.  When you can consistently determine the control handles to manipulate in a winform, then you can automate most any application easily.


IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window.

Share this post


Link to post
Share on other sites
Danyfirex

Hello I did something similar time ago. You could do something like this.

#include <GuiListView.au3>
#include <WinAPISysWin.au3>


Local $sItemTextToSelect="Luis" ;set item's text to search
Local $sWindowTitle="Form1"     ;set your correct windows title

Local $hWindow = WinActivate($sWindowTitle) ;activate the window
Local $sListViewClassNN = _MakeNetClassNN($hWindow, "SysListView32", "1") ;get Control classNN Make sure set correct list view Instance Index
ConsoleWrite("$sListViewClassNN: " & $sListViewClassNN & @CRLF)

Local $hListView = ControlGetHandle($hWindow, "", $sListViewClassNN) ;get control handle
ConsoleWrite("$hListView: " & $hListView & @CRLF)

Local $iCount = _GUICtrlListView_GetItemCount($hListView) ;get item count (just for testing)
ConsoleWrite("$iCount: " & $iCount & @CRLF)

Local $iFoundItem = _GUICtrlListView_FindText($hListView, $sItemTextToSelect) ;search/match item text
If $iFoundItem > -1 Then
    ConsoleWrite("Item Found Index: " & $iFoundItem & @CRLF)
    _GUICtrlListView_SetItemSelected($hListView, $iFoundItem) ;select the item
EndIf



Func _MakeNetClassNN($hWnd, $sControlType, $sIndexNN)
    Local $iLess = (StringRegExp($sControlType, "STATIC|EDIT|BUTTON|b|Window.b|SysListView32")) ? 0 : 2
    Local $sStringClass = _WinAPI_GetClassName($hWnd)
    Local $sStringWin = StringMid($sStringClass, 1, StringInStr($sStringClass, "."))
    Return $sStringWin & $sControlType & StringMid($sStringClass, StringInStr($sStringClass, ".app") - $iLess) & $sIndexNN
EndFunc   ;==>_MakeNetClassNN

Saludos

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

  • Similar Content

    • tentacole
      By tentacole
      Afternoon!
      This is my first post, so I apologize if this is in the wrong place. 
      I've created a while loop to click in a certain area of an application, and have the y axis change at the end of each loop. My loop continues to click at x:27, x:10, even though the $y is adding 15 at the end of each loop. I did a Send($x) and Send($y) into a Notepad to see if the $y had changed after each loop, and the 15 was being added to $y each loop. (If this makes sense)
       
      I'm unsure where I'm going wrong, and would be extremely grateful if someone can point me in the correct direction to fix this. 
      Local $rDirectory = "H:\oDemandProject\fList.txt" Local $rLine = _FileCountLines($rDirectory) Local $x = 27 Local $y = 10 While $rline > 0 WinActivate("OnDemand", "-> 1") WinWaitActive("OnDemand", "-> 1") ControlClick("OnDemand", "", "[CLASS:AfxFrameOrView120u; INSTANCE:1]", "left", 4, $x, $y) $y += 15 $rLine -= 1 WEnd  
    • Yirrlaar
      By Yirrlaar
      #Include <WinAPI.au3> local $ClassName = _WinAPI_GetClassName(WinGetHandle(WinGetTitle("[ACTIVE]"))) ControlClick(WinGetTitle("[ACTIVE]"), "", "[CLASS:"&$ClassName&"; INSTANCE:1]", "primary") When I am running this script it just gives me a ConsoleWrite output of "0x001D04A8"
      When using "AutoIT v3 Window Info" all the info I need for the ControlClick is there and displayed perfectly as if I typed it in normally.
      Upon click the button it should be clicking it, I see the following inn the console window:
      If I replace the $ClassName with the actual ClassName of "WindowsForms10.BUTTON.app.0.3296db7_r14_ad1" it works just fine, any ideas???
    • Tats
      By Tats
      Hi everyone,
      I have a problem with ControlClick function. It doesn't work no matter how I tried all the possible combination of the parameters.
      Below is the scripts of possible parameter combination:
      ;ControlClick("title","text","controlID ","button","clicks","x","y") ;title= Title, Class, Handle ;controlID= Class, ClassNN, Instance ;Title here is empty when I check it with AutoIt Info ControlClick("", "", "[ScreenKeyboard::Button18]", "left", "1", "230","890") ControlClick("", "", "[CLASS:ScreenKeyboard::Button; INSTANCE:18]", "left", "1", "230","890") ControlClick("", "", "[INSTANCE:18]", "left", "1", "230","890") ;Title here is the Class of the window ControlClick("[ScreenKeyboard::SKFrame]", "", "[ScreenKeyboard::Button18]", "left", "1", "230","890") ControlClick("[ScreenKeyboard::SKFrame]", "", "[CLASS:ScreenKeyboard::Button; INSTANCE:18]", "left", "1", "230","890") ControlClick("[ScreenKeyboard::SKFrame]", "", "[INSTANCE:18]", "left", "1", "230","890") ;Title here is the Handle of the window ControlClick("[0x000907A0]", "", "[ScreenKeyboard::Button18]", "left", "1", "230","890") ControlClick("[0x000907A0]", "", "[CLASS:ScreenKeyboard::Button; INSTANCE:18]", "left", "1", "230","890") ControlClick("[0x000907A0]", "", "[INSTANCE:18]", "left", "1", "230","890") Am I coding it correctly?
      Thanks
    • MaximusCZ
      By MaximusCZ
      Hello, and apologies if this have been discussed before, but I googled and couldnt find anything relevant.
      I have a problem where I try to send a control clink into to a window. 
      Part of window I try to send clicks to looks like this . The black border is showing when I mouse over it Au3Info, I get following information:

      I am testing its interaction with code

      The result I get is that it makes control clicks trough first line, opens and closes menus, as expected.
      When It gets to second line, it does not click a single icon. I can tell that coords are correct as the dropdown menus (No view active) gets focused(altough not rolled out). Same behaviour happens if roughly 40<y<60, so I know I am hitting good height. You can look at how it behaves here: output.webm 
      Dropdown 1 focuses at around 8 sec mark, and 13 sec mark it changes to second dropdown, defocusing first one, seemingly not registering any clinks inbetween.
       
      Have you ever encountered similar behaviour? I need to click the Key button, first on second line, with controlclick (or any other way not hijacking the mouse). I cant trigger that button by keyboard and There is no other control having control over it.
      Help
       
    • Skysnake
      By Skysnake
      I need to automate a specific GUI from a legacy system written in C.
      The spy tool gives me this

      I use this code
      Local $swintit = WinGetTitle("[active]") ConsoleWrite("active Window " & $swintit & @CRLF) If $swintit = "FILES NOTES" Then ; If $swintit = "FILES NOTES" Then ; got Window, now atomate ConsoleWrite("got Window " & @CRLF) ; now focus, then click :) ;EditPaste ;ControlCommand("FILES NOTES", "", 404, $acno) ; paste acno GUICtrlSetState(404, $GUI_Focus) ControlCommand("FILES NOTES", "", 404, $acno) ; paste acno GUICtrlSetState(401, $GUI_Focus) ControlClick("FILES NOTES", "", 401, $acno) ; click okay EndIf ; If $swintit = "FILES NOTES" Then The idea is to paste the acno value into the edit box, then click an Okay button.
      I get a console write that the active Window is as expected, but my loop completes without ever writing anything into the GUI.
      I also tried the control ID as text "404" - same result
      What am I missing?
      Skysnake
       
×