Jump to content
Sign in to follow this  
capitanves

"Visible Text", once more...BUT with calc.exe

Recommended Posts

capitanves

Hi, I am a newbie.

My task is to read the display value in calc.exe. I use AutoItInfo for getting oriented. 

What I see is:

1-The display value is contained under the tab "Visible Text"

2- The display control has the property text= nothing

3-The CalcFrame window has the property text =nothing

 

The main question is:

1- How can I get the text from calc display? Why Can't I get the "visible text" from of the windows?

 

Here the code I used

Thank you guys for the support :-)

#include <Constants.au3>



Local $strCalcClass = "[CLASS:CalcFrame]"

Run('calc.exe')
; Wait for the calculator to become active. The classname "CalcFrame" is monitored instead of the window title
$hCalcWnd = WinWaitActive("[CLASS:CalcFrame]")

; Now that the calculator window is active type the values 2 x 4 x 8 x 16
; Use AutoItSetOption to slow down the typing speed so we can see it
AutoItSetOption("SendKeyDelay", 10)
Send("2*4*8*16=")
Sleep(200)
WinWait("[CLASS:CalcFrame]")
ConsoleWrite('Ciccio franco va in vacanza'& @CRLF)
; this "works" in the sense that, in spite of what I see, AutoInfo says that there is
; no text in the contro
Local $myText = ControlGetText($hCalcWnd, "", "[CLASS:#32770; INSTANCE:1]")

; this works nicely
Local $strButton = ControlGetText($hCalcWnd,'', '[CLASS:Button; INSTANCE:29]')

; does not work
Local $strWinText = WinGetText('ACTIVE')

ConsoleWrite('====> mhCalcWnd=' & $hCalcWnd& @CRLF)
ConsoleWrite('====> Control Text=' & $myText& @CRLF)
ConsoleWrite('====> Window Text=' & $strWinText & @CRLF)
ConsoleWrite('====> Button Text=' & $strButton & @CRLF)

 

Share this post


Link to post
Share on other sites
czardas

I'm not sure of the reason, but some custom controls can be tricky. This is a work around which seems to work with calc.exe but the method used is unlikely to work with other programs in similar situations (not so often at least without modification).
 

#include <Constants.au3>
#include <StringConstants.au3>

Local $strCalcClass = "[CLASS:CalcFrame]"

Run('calc.exe')
; Wait for the calculator to become active. The classname "CalcFrame" is monitored instead of the window title
Local $hCalcWnd = WinWaitActive($strCalcClass)

; Use AutoItSetOption to slow down the typing speed so we can see it
AutoItSetOption("SendKeyDelay", 10)

; Now that the calculator window is active type the values 2 x 4 x 8 x 16
Send("2*4*8*16=")
Sleep(200)

Local $myText = StringStripWS(WinGetText($strCalcClass, ""), BitOR($STR_STRIPLEADING, $STR_STRIPTRAILING))

ConsoleWrite('====> mhCalcWnd=' & $hCalcWnd& @CRLF)
ConsoleWrite('====> Control Text=' & $myText& @CRLF)


I imagine someone will post a better solution. There ought to be one and I would like to know what it is myself. In any case you are unlikely to need calc.exe since there are a variety maths functions available in AutoIt which will suffice in most situations.

Edit : The forum highlighting has gone nuts.

Edited by czardas

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  

×