THeckel Posted November 6, 2012 Posted November 6, 2012 (edited) When using ControlSend to send a string to an "edit" field I get unexpected results. So, I need some guidance from the community. I'm sending a string in the form yyyy-ddd-HH:MM:SS. For now I'm hard coding the year and time. So for now I'm sending a string that looks like this: "2012-311-13:33:33". What I get in the edit box is something on the order of "2012-311-13:33#3". The actual value seems to vary a litle with each run. I can substitute a space or another character like an "a" for the second ":" and the string populates the box just fine. It is the second ":" that seems to be the problem. Info Window: >>>> Window <<<< Title: Telemetry_Analysis Class: TopLevelShell Position: 100, 100 Size: 808, 702 Style: 0x16CF0000 ExStyle: 0x00000100 Handle: 0x000D03AC >>>> Control <<<< Class: Edit Instance: 15 ClassnameNN: Edit15 Name: Advanced (Class): [CLASS:Edit; INSTANCE:15] ID: Text: text Position: 379, 69 Size: 139, 17 ControlClick Coords: 67, 9 Style: 0x540000C0 ExStyle: 0x00000200 Handle: 0x00230476 >>>> Mouse <<<< Position: 550, 201 Cursor ID: 0 Color: 0xA6A6A6 Code section, it's a bit messy due to trying to troubleshoot this problem: expandcollapse popup$step = 10 pre_step($step) $sStartID = "Edit15" $sStartYear = "2012" $sStartDay = @YDAY - 30 ;;;;;;;;;;;;;; need to calculate for first 30 days of the year !!!!! ;$sStartTime = "13:33:33" $sStartHour = "13" $sStartMin = "33" $sStartSec = "33" $sStopID = "Edit14" $sStopYear = "2012" $sStopDay = @YDAY $sStopTime = "13:44:44" $sColon = ":" $ctrlID = "ListBox3" $sMnemonic = "ACS10000" $sAddSelect = "Button15" wait_win($TelemAnalysis_gui, $step) $iWinExists = WinExists($TelemAnalysis_gui) if $iWinExists Then ;Set start and stop times tim_set_textbox($TelemAnalysis_gui, $sStartID, $sStartYear & "-" & $sStartday & "-" & $sStartHour & ":" & $sStartMin & $sColon & $sStartSec, $step) tim_set_textbox($TelemAnalysis_gui, $sStopID, $sStopYear & "-" & $sStopday & "-" & $sStopTime, $step) ;ControlSend($TelemAnalysis_gui, "", $sStartID, $sStartDate & "-" & $sStartHour & ":" & $sStartMin & ":" & $sStartSec) ;ControlSend($TelemAnalysis_gui, "", $sStopID, $sStopDate & "-" & $sStopTime) ;click the add select button listbox_select_item_clicks($TelemAnalysis_gui, $sMnemonic, $ctrlID, 1) btn_clk($TelemAnalysis_gui, $sAddSelect, $step) logup($TelemAnalysis_gui & " Completed " & $step) EndIf logup("Step " & $step & " complete") ps($step) Func tim_set_textbox($win, $ctrlID, $string, $step) jiggle_button($win, $ctrlID, 2, 30) wait_ctrl($win, $ctrlID, 5000) ControlFocus($win, "", $ctrlID) ;ControlSend($win, "", $ctrlID, "^{LEFT}^+{END}{DEL}") ;ControlSend($win, "", $ctrlID, "{HOME}+{END}{DEL}") ;MsgBox(0, "DEBUG", "Sending " & $string) ;ControlSend($win, "", $ctrlID, $string & "+{End}{DEL}") ;ControlSend($win, "", $ctrlID, $string & "+{END}{DEL}") ControlSend($win, "", $ctrlID, $string) $txt = ControlGetText($win, "", $ctrlID) ;MsgBox(0, "DEBUG", "Got " & $txt) if $txt = $string then logup("Step " & $step & ": text box set to " & $txt) return 1 Else ;TODO Add $error_tag logup("Step " & $step & ": text box not set correctly" & $error_tag) ;TODO Add time-out ;MsgBox(0, "Script Error", "Please manually set the text box to " & $string & " then select Enter") WinActivate($win) return 0 EndIf EndFunc Edited November 6, 2012 by THeckel
water Posted November 6, 2012 Posted November 6, 2012 Try to send the text as "raw". That means: Add a flag to the ControlSend function:ControlSend($win, "", $ctrlID, $string, 1) My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki
THeckel Posted November 6, 2012 Author Posted November 6, 2012 Thanks for the suggestion. Adding a "raw" (1) flag to ControlSend did not resolve the issue.
jaberwacky Posted November 6, 2012 Posted November 6, 2012 (edited) This reproducer seems to work fine. Run("Notepad.exe") WinWaitActive("Untitled - Notepad") Global Const $sColon = ':' Global Const $send_string = @YEAR & '-' & "Tuesday" & '-' & @HOUR & ':' & @MIN & $sColon & @SEC ControlSend("Untitled - Notepad", '', "Edit1", $send_string) What happens if you type the string into the program manually? Edited November 6, 2012 by LaCastiglione Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
THeckel Posted November 6, 2012 Author Posted November 6, 2012 The edit box accepts the string when typed in manually.
Moderators SmOke_N Posted November 6, 2012 Moderators Posted November 6, 2012 (edited) This issue has been noted before, but for the life of me, I can't remember who made a wrapper solution for it. I thought it was Martin, but can't find it. Anyway, have you tried ControlSetText() ? Edit: Maybe it was Zedna, I really don't know, I know I've seen the issue many times on the forum. Here's a link to Zedna's solution/suggestion: Edited November 6, 2012 by SmOke_N Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.
THeckel Posted November 6, 2012 Author Posted November 6, 2012 Thank you for the suggestion and for the link to the history. ControlSetText is working. So the issue seems to be related to ControlSend specifically.
sktan7 Posted November 7, 2012 Posted November 7, 2012 (edited) It is appropriate for me to mention I had similar problem with controlsend here? The problem seems to be intermittent This happens when I upload picture files. when sending a filename or directory, like "d:folder1folder2folder3image.jpg". There are times when 1. ":"(colon) will become ":" (semi-colon) 2. "" become a pipe, "|" A few thing I also notice. 1. if the time between a pop up dialogue box till my controlsend is too short, there is more likely for this to happen! I use sleep(250) to introduce the delay. Although the problem may still happen sometimes. If i use sleep(150), I will get the error more frequently. 2.I run a few programs at the same time, like firefox, chrome, thunderbird, itune. I suspense the system memory may have cause this problem. These are intermittent problem. I could not generate this error consistently and therefore I could not submit a bug report. The only way to work around was to run a loop to re-controlsend if there is an error, in my case. Edit: I forgot to mention that similar problem happen if I use "send" too. Edited November 7, 2012 by sktan7
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now