Jump to content

Simple Issue? send, controlsend, Mouseclick all seem to fail?

Recommended Posts


New to AutoIT and hopeful but frustrated. I have a program, which unfortunately I cannot share, which seems "immune" to the basic AutoIt methods to interact.  Starting with the basic scripts for notepad interaction & starting with a simple Menu File , Open ;  I've tried send, sendcontrol, mouseclick -- all report "success", with no errors but the window doesn't react as it should (as in menu doesn't open, open file dialog doesn't start, window doesn't hide, window doesn't close).   Using AutoITinfo I have been able to view various elements of the program including getting the windows "Class" for the program so the data is available to autoit (?),  still no luck. . .   Below is a long bit of code (many lines commented out to record failed attempts) with lots of debugging console writes for output to SciTE-Light console area. . .   Note I had some issues with directly trying "run" the application but I worked around with a BAT file & start. . .    Running under W10 both on personal laptop and W10 VMWare Client, same results. . . 


#include <Constants.au3>
#include <MsgBoxConstants.au3>

; AutoIt Version: 3.0
; Language:       English
; Platform:       Win9x/NT
; Author:         leveraged from examples by Jonathan Bennett (jon at autoitscript dot com) & others
;                 Frankensteined by <<ME>>

; Script Function:
;   Opens Avultimate tool and attempts to interact with it.
; Having problem which are like
; https://www.autoitscript.com/forum/topic/137684-cannot-get-window-to-close/, except no silent mode, window is clearly visible.
; https://www.autoitscript.com/forum/topic/192688-nvidia-inspector-automation/#comment-1382617 -- Put pauses in between sends, clicks etc.
; https://www.autoitscript.com/forum/topic/180521-shellexecute-and-winwaitactive/#comment-1295977 ; possibly another window stealing focus?

;GetNSetProgramPath() ;attempt to get path to program to "run", went with .BAT file as per below.
;Run ("Avultimate"); should work with path set but doesn't ? tried other methods.
;run("C:\Program Files\HEWLETT-PACKARD\AvUltimate\AvUltimate.exe") ; fails
;run("C:\Users\Public\Desktop\Avultimate") ; .lnk file fails.
run("C:\Users\******\Documents\avultimate.bat") ; has 1 line: start "" "C:\Program Files\HEWLETT-PACKARD\AvUltimate\AvUltimate.exe"

; wait for the Avultimate window to become active.
local $hWnd = 0
$hWnd = WinWaitActive("Active Health System Viewer","",10) ;return a Window handle. . .
;$hWnd = WinWaitActive("[Class:WindowsForms10.Window.8.app.0.141b42a_r9_ad1","",5) ; attempt to use class from App but that fails(?) didn't pursue further . .
if $hWnd = 0 Then
   Consolewrite ("WinWaitActive Failed: "&@error&@CRLF)
   Consolewrite ("WinWaitActive returned hWnd="&$hWnd&@CRLF)

local $status = 0

; by default this program opens maximized, as the only visible window.
; Attempt to set the state of the application -- These DO NOT work yet. .
    $status = WinSetState($hWnd, "", @SW_HIDE)
    Consolewrite ("WinSetState  Hide: "&$status&" "& @error&@CRLF)
    ; Wait for 2 seconds.

    ; Set the state of the Notepad window to "show".
    $status = WinSetState($hWnd, "", @SW_SHOW)
    Consolewrite ("WinSetState Show: "&$status&" "& @error&@CRLF)
    ; Wait for 2 seconds.

; Now try to open a file by pressing Alt-F and then scrolling down (s) to the Open menu
; I can, in a live window, type Alt-F and get the file menu to open. . .

; currently all of these fail. . .
$status = Send("!f")
Consolewrite ("Send: "&$status&" "& @error&@CRLF)
$status = Send("{DOWN}{ENTER}")

; found post mentioning Case sensitivity sometimes.
$status = Send("!F")
Consolewrite ("Send2: "&$status&" "&@error&@CRLF)
Send("{DOWN }{ENTER}")

;found post saying "Send" may not work so try, ControlSend() Class obtained through autoitinfo
$status = ControlSend($hWnd,"","[Class:WindowsForms10.Window.8.app.0.141b42a_r9_ad1]", "!f")
Consolewrite ("ControlSend1 "&$status& " " & @error&@CRLF)
$status = ControlSend($hWnd,"","[Class:WindowsForms10.Window.8.app.0.141b42a_r9_ad1]", "[DOWN ] [ENTER]")
Consolewrite ("ControlSend2: "&$status&" "&@error&@CRLF)

;try uppercase Alt-F
ControlSend($hWnd,"","[Class:WindowsForms10.Window.8.app.0.141b42a_r9_ad1]", "!F")
ControlSend($hWnd,"","[Class:WindowsForms10.Window.8.app.0.141b42a_r9_ad1]", "[DOWN ] [ENTER]")

;how about we simply try to click the mouse in current active window ?
$status = 0
$status = MouseClick($MOUSE_CLICK_LEFT, 22, 37, 1 , 0) ; location, on full screen, of File Menu
ConsoleWrite("MouseClick Status = "&$status &" " & @error&@CRLF)
$status = MouseClick($MOUSE_CLICK_LEFT, 55, 57, 1 , 0)  ; location, on full screen, of Open item in file menu
ConsoleWrite("MouseClick Status = "&$status &" " & @error&@CRLF)

;debugging, remind me, what is the windows handle we got from winwaitactive ?
ConsoleWrite("Confirm Handle from WinWaitActive: "& $hWnd & @CRLF)

; Just to be sure, Let's look at at ALL the available handles. . .

$hWnd = 0
; Checking, is avultimate still the "Active Window"?
$hWnd = WinActive("Active Health System Viewer","") ;return a Window handle. . .
if $hWnd = 0 Then
   Consolewrite ("WinActive Failed: "&@error&@CRLF)
   Consolewrite ("WinActive, handle of Active Window= "&$hWnd&@CRLF)

; Attempt to close the Active Window
local $status = WinClose($hWnd)
ConsoleWrite ("WinClose Status= "&$status&@CRLF)

; because none of my attempts to interact with the application works this message helps me know the script is "Complete"
MsgBox ($MB_SYSTEMMODAL, "", "Script is done"& @CRLF & "WinClose status:" & $status)
; Finished!

; FUNCTIONS start here . . .
Func GetNSetProgramPath()
    ; Retrieve the value of the environment variable %PATH%.
    ; When you assign or retrieve an envorinment variable you do so minus the percentage signs (%).
    Local $sEnvVar = EnvGet("PATH")

    ; Display the value of the environment variable %PATH%.
    MsgBox($MB_SYSTEMMODAL, "", "The environment variable %PATH% has the value of: " & @CRLF & @CRLF & $sEnvVar) ;

    $sEnvVar = $sEnvVar & "C:\Program Files\HEWLETT-PACKARD\AvUltimate"
    MsgBox($MB_SYSTEMMODAL, "", "The environment variable %PATH% has the value of: " & @CRLF & @CRLF & $sEnvVar)
    EnvSet("PATH", $sEnvVar)

EndFunc   ;==>Example

Func WinHandleList()
    ; Retrieve a list of window handles.
    Local $aList = WinList()

    ; Loop through the array displaying only visable windows with a title.
    For $i = 1 To $aList[0][0]
        If $aList[$i][0] <> "" And BitAND(WinGetState($aList[$i][1]), 2) Then
           ; MsgBox($MB_SYSTEMMODAL, "", "Title: " & $aList[$i][0] & @CRLF & "Handle: " & $aList[$i][1])
           ; switch to console write to avoid MsgBoxes pop-up
           ConsoleWrite("Title: " & $aList[$i][0] & " Handle: " & $aList[$i][1] & @CRLF )
 EndFunc   ;==>Example

---- END OF SCRIPT -- 

SciTE-Lite “Go” output is below; WinWaitActive and WinActive returns seem to confirm that the application window is ACTIVE and remains active throughout the script.  I report on status & @error  for most of the function calls.   so the "1 0" says status = 1, @error = 0 for a particular call, which I think is supposed to mean ALL OK. . . 

>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\******\*****\AHSTest.au3"    
WinWaitActive returned hWnd=0x00240650
WinSetState  Hide: 1 0
WinSetState Show: 1 0
Send: 1 0
Send2: 1 0
ControlSend1 1 0
ControlSend2: 1 0
MouseClick Status = 1 0
MouseClick Status = 1 0
Confirm Handle from WinWaitActive: 0x00240650
Title: Active Health System Viewer (174 day(s) remaining) HPE Confidential - Internal and Approved Partner Usage ONLY Handle: 0x00240650
Title: C:\Users\*****\*****\AHSTest.au3 - SciTE-Lite [2 of 3] Handle: 0x000406F4
Title: March 2018 trimmed.xlsx - Excel Handle: 0x00120644
Title: PERSONAL.XLSB - Excel Handle: 0x00210A88
Title: AutoIt Help (v3.3.14.3) Handle: 0x005A0CAA
. . . . . other cruft . . . 
Title: Desktop Handle: 0x0009051A
Title: Program Manager Handle: 0x00010112
WinActive, handle of Active Window= 0x00240650
WinClose Status= 1
>Exit code: 0    Time: 22.8


Note also when I attempt the final "WinClose" it reports success but the window stays open. . . 

Edited by JLogan3o13
Added Code Tags

Share this post

Link to post
Share on other sites

OK so I read all ~20 posts containing "WindowsForms" --   Many are just posts saying "read more about WindowsForms" but a few nuggets are out there.   I've pointed out a the most helpfulful below. 

Still I was unable to get anything to work. . .   Most annoyingly all functions return "good" status -- while not doing anything for the following items, using send, controlsend, controlclick and even direct call to a .

(name) instance (handle)  control

 WindowsForms10.Window.8.app.0.141b42a_r9_ad1 139 0x000C0E6A  "File Menu"
 WindowsForms10.SysTabControl32.app.0.141b42a_r9_ad1 1 0x00181DF2   "Dashboard Tab" 
 WindowsForms10.BUTTON.app.0.141b42a_r9_ad1 1 0x000F1310 *** Button I want to Push


This included using the old WndID to confirm AutoITinfo output. 

I also found the helpful script NET_DumpAllControlNames to confirm I had the correct handles. 

One difference I found was that the handle I was interested was found as item 139 in this code but AutoITinfo reported instance 142. . .   Still the handle in Hex was the same. 

Found this article to use  a DLL call _sendclick -- no luck. . .


Share this post

Link to post
Share on other sites

Try this one, might work.


If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

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


Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.