rawkhopper

ControlSend and sluggish software

5 posts in this topic

#1 ·  Posted (edited)

Hello everyone,

I have a script that is automating a piece of sluggish software.  I want to automate it with a bit of caution and I am not sure the best way to do it.  ControlSend works great most of the time.  If I have it enter 10 into a text box every once in a while it will enter 1 or 11 and then hit enter.

To overcome this I use MouseClick to select the text I just entered and then see if it matches the string it was supposed to put in before it hits enter.  This seems to work but what I love about ControlSend is there is less room for human interaction messing it up.  

Yes I could block input but I prefer not to do that (permissions).

Is there a better way of doing this?  Any Help would be much appreciated.

Anyway here is the snippet of the script in question:

Func KVSend ()
   WinActivate ( "Window", "" )
   Local $WindowPos = WinGetPos("Window", "")
   If $kV < 30 Then
         WinActivate ( "Window", "" )
         ControlClick ("Window", "", 1001) ;Click in Accel Voltage box
         Sleep (100)
         ControlSend ("Window", "", 1001, $kV) ; \ kV
         Sleep (100)
         MouseMove($WindowPos[0]+130,$WindowPos[1]+75,1)
         MouseClick($MOUSE_CLICK_LEFT)
         MouseClick($MOUSE_CLICK_LEFT)
         Send ("^c")
         Local $clip = ClipGet ()

         If $clip = $kV Then
            ControlSend ("Window", "", 1001, "{ENTER}") ;Hit ENTER if value is correct
            Sleep (100)
            ControlClick ("Window", "", 1518) ;Lens Clear
         Else
            Send ("{BACKSPACE}")
            KVSend() ; If value is incorrect try again
         EndIf
   EndIf

 

Edited by rawkhopper

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

Have you tried to get the current value with ControlGetText() and compare that?

edit: Something like this:

Func KVSend()
    WinActivate("Window", "")
    Local $WindowPos = WinGetPos("Window", "")
    If $kV < 30 Then
        WinActivate("Window", "")
        While $kv <> ControlGetText("Window", "", 1001)
            Sleep(100)
            ControlSend("Window", "", 1001, $kV) ; \ kV
        WEnd
        ControlSend("Window", "", 1001, "{ENTER}") ;Hit ENTER if value is correct
        Sleep(100)
        ControlClick("Window", "", 1518) ;Lens Clear
    EndIf
EndFunc   ;==>KVSend

Jos

Edited by Jos

Visit the SciTE4AutoIt3 Download page for the latest versions        Beta files                                                          Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites

#3 ·  Posted

Hmmm,

I thought I had tried ControlGetText and failed.  I thought it gave me the old value and not the new value written in.  I must have done something wrong before.  Thanks for the help!

Share this post


Link to post
Share on other sites

#4 ·  Posted

Hey big thanks again the way you suggested works quite well! I had to add in a line to clear the value first before entering otherwise if you somehow messed it up it would never get out of the loop but you were a very big help thanks!!!!!!

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

    • badcoder123
      By badcoder123
      Anyone know how to access the information circled in the photo?
       

    • AndreyS
      By AndreyS
      Dear developers and creators of the language, please explain to me why when pressing the combination Crtl + Shift + C from the 5th or the 10th time "sticks / sinks" Ctrl or Shift? And then you need to press Ctrl or Shift again to reset their triggering. I only need to use hot keys like in the example!
      The code is a small example. Its essence is that when a user in the editor selects any number and presses a combination, then it increases by 1. 
      Dim $x HotKeySet("+^c","Calc") While 1 Sleep(10000) WEnd Func Calc() Send("^c") Sleep(50) $x=ClipGet()+1 ClipPut($x) Send("^v") EndFunc I thought that in my program some kind of glitch was searching for a reason for a long time. And it turned out that apparently somehow the work of some functions used in the example is not compatible. 
      Tell me, please, what is the problem?
    • ur
      By ur
      If you observe in below code.
      Func _WinWaitActivate($title,$text,$timeout=$time_out) Logging("Waiting for "&$title&":"&$text) $dHandle = WinWait($title,$text,$timeout) if not ($dHandle = 0) then If Not WinActive($title,$text) Then WinActivate($title,$text) WinWaitActive($title,$text,$timeout) Else Logging("Timeout occured while waiting for the window...") Exit EndIf EndFunc WinActivate("Untitled - Notepad") $p = "Notallowed1!!" Send("{ENTER}{ENTER}{ENTER}{ENTER}"& $p &"{ENTER}create{SPACE}database{SPACE}"& $p &";{ENTER}") In the notepad if you observe, ! is missing in the text got.
       
      Is there way to get that also printed.
    • spuuunit
      By spuuunit
      This is what I'm trying to do: In Firefox, if you hold down CTRL + C for about 200ms, then press CTRL + T. This is my code:
      While WinActive(" - Mozilla Firefox") If _IsPressed("A2", $hDLL) And _IsPressed("43", $hDLL) Then $timer = TimerInit() While _IsPressed("A2", $hDLL) And _IsPressed("43", $hDLL) Sleep(10) $diff = TimerDiff($timer) If $diff > 200 Then Send("^{T}") While _IsPressed("A2", $hDLL) And _IsPressed("43", $hDLL) Sleep(10) WEnd EndIf WEnd EndIf WEnd The problem is that the CTRL key gets stuck down after Send("^{T}"). I found this, but what I understand that happens when I release, and that is not what I want. The "General unstuck method" did nothing.
    • Baboo85
      By Baboo85
      Hi all,
      I need to start a script that include:
      - admin privileges
      - multiple cmd commands
      - no bat, no exe, no tmp files created anywhere (especially in the user temp folder)
      In a bat file it would be simple, but users shouldn't see what commands I'm sending.
      Example of the script:
      echo off cls echo. echo I AM A TOOL echo. echo NOTE: echo - note 1 echo - note 2 echo - etc set USER1=0 set COMPUTER1=0 if /i %username% equ user.user ( set USER1=1 set COMPUTER1=1 ) if /i %username% equ another.user set USER1=1 if /i %computername% equ notebook set COMPUTER1=1 if %USER1% EQU 1 ( if %COMPUTER1% EQU 1 ( reg delete "HKLM\SOFTWARE\blablabla" /f ) else ( echo Computer not authorized. Contact assistance.) ) else ( echo User not authorized. Contact assistance.) echo. pause exit With the send("") is a disaster.
      I'm a noob here, so what can I do?
       
      EDIT: OR ELSE I explain the situation and what I need, so if there is a simple solution I can use that.
       
      SITUATION: our domain users have Users rights on the machine. Some of them need administrator rights.
      We create a local user with administrator rights, so that the users must insert username and password when asked to run something with administrator rights.
      We have an internal domain group policy that blocks EXE, BAT, COM, TMP files from the user local temp directory, for a security reason (malware). That also blocks most software installation.
      But some users are often out of office, away from workplace and in another country, they need a complete control on their computers.
       
      WHAT I NEED: I need to check the username and the computer name. If the username is the one with local administrator rights and the computer name is a computer that is qualified to temporary remove the policy, then I need to execute a REG DELETE command with administrator rights.
       
      I hope I explained myself.
       
      Thank you very much.