Hello,
still learning and trying to understand AutoIT but having problem in filling my PDF file.

So my code looks like similar to this:
Global $1 = "text text 44444444"
Global $2 = "texting2 texting2"
Global $3 = "newtext3 next3"
ShellExecute ("C:\Users\XXX\Desktop\myPDF.pdf")
WinWaitActive("MyPDF.pdf - Adobe Acrobat Reader DC")
Send ("{TAB}")
ClipPut($1)
Send ("^v")
Send ("{TAB 3}")
ClipPut($2)
Send("^v")
Send ("{TAB}")
ClipPut($3)
Send("^v")
So its fill my PDF form, the first field looks good, the code add the text text 4444, then second should be $2 with texting2 texting2 but for some reason the code uses for second and third field after TAB only variable $3.
So, I receive in $2 and $3 for some reason same newtext3 next3 in both, why its skipping the variable $2? Maybe there also much better solution for instant text? Because Send writes with delay by letters which I don't like.
Thanks!

My AutoIt script works fine, for the most part, however, if it goes idle for roughly 30 minutes, it will won't be able to send data to a 3rd party application window titled, "Case #".
The problem lies within the function "SendFusion", it's able to see the handle for the "WinActivate" and "WinWaitActivate" (I've also tried putting in 10 seconds in the WinWaitActivate as well, doesn't work). However, if we have been idle, it will always fail to send data afterward. On what I've tried so far:
"Send" function with the data and a {ENTER} i.e. Send($CaseTxt & "{ENTER}"), this won't even hit the enter key
ControlSetText, tried passing the handle from WinActivate, using the title "Case #" that was copied directly from the Autoit Window Info, hard coding the title, Using CLASS:WindowsForms10... always returns a 0
ControlCommand (same as above) always returns a 0
ControlGetFocus always returns a 0
ControlFocus, always returns a 0
Creating a new and simple Au3 script that just sends data to "Case #", also fails
NOTE: If I close the Au3 script and just scan the data directly into the "Case #" or even type it, it works fine with no issues. I'm confused as to why it would not work after a long idle period?
Below are the essential parts of the script, I can provide the entire thing if needed. Any suggestions would be greatly appreciated!
#include <AutoItConstants.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <Process.au3>
#include <Misc.au3>
#include <IE.au3>
;---------------------------------------------------------------
; Only one instance can run
;---------------------------------------------------------------
If _Singleton("gross.exe", 1) = 0 Then
MsgBox($MB_SYSTEMMODAL, "Warning", "Gross.exe is already running. Please exit the existing version first (check the icons in the lower right corner of your screen) before running it again.")
Exit
EndIf
;---------------------------------------------------------------
; AutoIt Options
;---------------------------------------------------------------
Opt("GUIOnEventMode", 1) ; Change to OnEvent mode
Opt("WinWaitDelay", 0) ; Alters how long a script should briefly pause after a successful window-related operation. Time in milliseconds to pause (default=250).
Opt("WinTextMatchMode", 1) ; Alters the method that is used to match window text during search operations. 2 = Quick mode
Opt("SendKeyDelay", 0) ; Alters the length of the brief pause in between sent keystrokes. A value of 0 removes the delay completely. Time in milliseconds to pause (default=5).
if ($fusionWindowTitle="NONE" or $fusionCaseNumWinTitle="NONE" or $appWindowTitle="NONE" or $winActivateTimeout="NONE" or $winCloseTimeout="NONE" or $winWaitTimeout="NONE" or $pdfViewerWidth="NONE" or $pdfViewerHeight="NONE" or $pdfViewerLeft="NONE" or $pdfViewerWindowName="NONE" or $pdfViewerExeName="NONE" or $pdfUrl="NONE" or $pdfDownloadCommand="NONE") Then
Msgbox(0,"ERROR", "gross.ini is missing or does not contain all settings. Please contact Help Desk with this information")
Exit -1
EndIf
;---------------------------------------------------------------
; application settings/constants
;---------------------------------------------------------------
Global Const $[VARIABLE] = IniRead("gross.ini", "default", "[TitleOfVariable]", "NONE")
Global Const $[VARIABLE] = IniRead("gross.ini", "default", "[TitleOfVariable]", "NONE")
Global Const $[VARIABLE] = IniRead("gross.ini", "default", "[TitleOfVariable]", "NONE")
Global Const $[VARIABLE] = IniRead("gross.ini", "default", "[TitleOfVariable]", "NONE")
;---------------------------------------------------------------
; create the main window
;---------------------------------------------------------------
Local $mainWindow = GUICreate($appWindowTitle, 380, 190) ; create the main GUI window
GUISetOnEvent($GUI_EVENT_CLOSE, "handleCloseClick") ; when the click the windows close button call handleCloseClick()
WinSetOnTop($appWindowTitle, '', 1) ; Sets main GUI always on top
;---------------------------------------------------------------
; create the controls on the main window
;---------------------------------------------------------------
Local $okButton = GUICtrlCreateButton("OK", 160, 160, 54,24) ; create OK button
GUICtrlSetOnEvent($okButton, "validateInput") ; when they click ok, call handleInputProcessRequest()
GUICtrlCreateLabel("Scan Input", 10, 10) ; create a label
Global $inputScan = GUICtrlCreateInput("", 10,134,358) ; create the input scan box
GUICtrlSetOnEvent($inputScan, "validateInput") ; when they press enter in the scan input box, call handleInputProcessRequest()
GUICtrlSetState($inputScan,$GUI_FOCUS) ; automatically sets focus on the input field
GUISetState(@SW_SHOW)
; main GUI loop that runs at all times
;---------------------------------------------------------------
While 1
;----------------------------------------------------------
; If sumatraPDF active, resets focus back to GUI
;----------------------------------------------------------
If WinActive($pdfViewerWindowName) Then
consoleWrite('While Loop sumatraPDF was active' & @CRLF)
setMainWindow()
;----------------------------------------------------------
; After data sent to ProTracker, check for mismatch
; save button to trigger the event handler when clicked
;----------------------------------------------------------
ElseIf WinActive($proTrackerWindowTitle) Then
$ie = _IEAttach("ProTracker")
$mismatchButton = _IEGetObjByName($ie, $proTrackerMisMatchButtonId)
$oEvent = ObjEvent($mismatchButton, "mismatchButton_")
If @error Then setMainWindow()
;---------------------------------------------------------------------
; If Fusion is prompting for the case #, focus back to main GUI input
; If second GUI 'Unknown' detect do nothing
;---------------------------------------------------------------------
ElseIf WinExists($fusionWindowTitle) and WinExists($fusionCaseNumWinTitle) and Not WinActive($mainWindow) and Not WinExists('Unknown Input') Then
setMainWindow()
EndIF
;---------------------------------------------------------------------
; Checks if $processFlag = Done, if so, shows PDF viewer and clears
; processFlag for next iteration
;---------------------------------------------------------------------
IF WinExists($pdfViewerWindowName) and $processFlag == 'Done' Then
WinSetState ($pdfViewerWindowName, '', @SW_SHOW)
$processFlag = ''
setMainWindow()
EndIF
Sleep(100) ; Sleep to reduce CPU usage
WEnd
Func handleInputProcessRequest($input)
$processFlag = True
Local $hTimer = TimerInit()
consoleWrite('> handleInputProcessRequest: ' & @CRLF)
Local $idInput = identifyInput($input)
; Select a proccess to run based on id input
Select
Case $idInput = "container"
; regex that captures only the case number
$caseTxt = StringUpper(StringRegExpReplace($strippedInputData, '\??(\w*\d*-\d*|\d*).*$','$1'))
If WinExists($fusionWindowTitle) and WinExists($fusionCaseNumWinTitle) Then
sendProTracker(StringUpper($strippedInputData))
sendFusion($caseTxt)
; gets pdf for sumatraPDF in seperate script, since that function is the slowest
Run("viewPDF.exe " & $caseTxt)
;getSumatraPDF($caseTxt)
$lastCaseNum = $caseTxt
Else
; Checks to make sure the previous "Container" case num is the same
; to the current Container case num, before sending to ProTracker
If($lastCaseNum <> $caseTxt) Then
; If not the same case number send alert sound
SoundPlay("error.wav")
Else
sendProTracker($strippedInputData)
EndIf
EndIf
Case $idInput = "user"
sendProTracker($strippedInputData)
Case $idInput = "cassette"
sendProTracker(StringUpper($strippedInputData))
Case $idInput = "unknown"
selectUnknown()
EndSelect
Local $fDiff = TimerDiff($hTimer)
$processFlag = 'Done'
consoleWrite('> handleInputProcessRequest Completed Total time: ' & $fDiff & ' ' &@CRLF&@CRLF&@CRLF)
EndFunc
Func sendFusion($caseTxt)
Local $hTimer = TimerInit()
consoleWrite('+ sendFusion initiated: ' & $caseTxt & @CRLF)
If $caseTxt = "" Then
MsgBox(0, "Error", "Not a valid case number")
Else
;$fusionCaseNumWinTitle = "Case #"
$retVal1 = WinActivate($fusionCaseNumWinTitle, "")
consoleWrite("ReturnValue WinActivate " & $retVal1 & @CRLF)
$retVal2 = WinWaitActive($fusionCaseNumWinTitle,"",$winActivateTimeout)
consoleWrite("ReturnValue WinWaitActive: " & $retVal2 & @CRLF)
$retVal3 = ControlSetText($fusionCaseNumWinTitle, "", "", $caseTxt)
;$retVal3 = ControlCommand($fusionCaseNumWinTitle, "", "", "EditPaste", $caseTxt)
consoleWrite("ReturnValue ControlSetText: " & $retVal3 & @CRLF)
;Send($caseTxt & "{ENTER}")
WinWaitClose($fusionCaseNumWinTitle, "", $winCloseTimeout)
consoleWrite('+ sendFusion WinWaitClose: ' & @CRLF)
EndIf
Local $fDiff = TimerDiff($hTimer)
ConsoleWrite('+ sendFusion Completed Total time:' & $fDiff & ' ' & @CRLF)
EndFunc
Console logs from the SciTLE
Window (x86) Info matches the correct handle for the WinActivate and WinWaitActivate

Window Control (x86) Info, I've tried the CLASS, the ID, also I just noticed that the "handle" in "Control" and "Window" appear to be different as well.

So far the only work-around is to close down the 3rd party application and the AutoIt script, re-open them and it works all completely fine. But this is a pain for the end-user since it's all touch screen and it slows down their workflow, which they can be extremely sensitive about.

hello autoit group
please i've a question
i had make a function that put some thing into the clipBoard and paste it
using the send function
e.g
ClipPut("hello")
send("^v")

when the keyboard is english all things work fine
but when the keyboard is arabic the send command write the ltr v insted of the text in clipboard
i was tryed to use
send("{ctrldown}v{ctrlUp}")
but the same
please can any one help me

Hello all! I'm stuck at a seemingly simple part of my script. Using IE, I'm filling out a web form that involves clicking a "Browse" button and selecting a file. Once the file explorer dialog opens, however, I am unable to control it.
I have a string, which is the name of the file I want, and I'm trying to insert it into the 'File name:' text box in the dialog (which already has focus), but it doesn't get inserted. I've tried ClipPut and Send.

What's even more concerning is, when I close the dialog, the string is then pasted into the very next window that has focus, which is often SciTE. It's like that Browse's file open dialog halts all processes. Once it's closed, the script continues.
;~ Open a IE window and navigate to the login page.
Global $oIE = _IECreate($urlBBLogin)
_IELoadWait($oIE)
;~ Recognize the form on this page (login input boxes).
Local $oForm = _IEFormGetObjByName($oIE, "login")
Local $oTextLogin = _IEFormElementGetObjByName($oForm, "user_id")
Local $oTextPass = _IEFormElementGetObjByName($oForm, "password")
;~ Enter the Automation user credentials into the form.
_IEFormElementSetValue($oTextLogin, $bbUsername)
_IEFormElementSetValue($oTextPass, $bbPassword)
;~ Click the Login button.
_IEFormSubmit($oForm)
_IELoadWait($oIE)
;~ Navigate to the feedfile upload page.
_IENavigate($oIE, $urlUpload)
_IELoadWait($oIE)
;~ Click the Browse button
Local $Browse = _IEGetObjById($oIE, "feedFile_chooseLocalFile")
_IEAction($Browse, "Click")
Local $Browse = WinWait("Choose File to Upload")
;~ Open the file we created.
WinActivate($Browse)
Send($finalFile)
Has anyone else experienced this problem? Any ideas to get around it? Am I approaching this the wrong way?
Any support is greatly appreciated.
Thank you.