Christopher Blue Posted September 22, 2004 Posted September 22, 2004 Right now I am using the excellent Auto-It v3 to script some commands to send to a specific window. However, the window must be active to receive the command. How would I use Auto-It (or if that is not possible, some other scripting solution) to send keyboard input to the window while it is inactive and perhaps even minimized? Also, can it be completely separate from user keyboard input so if I am typing while the script is sending, it won't get confused?
nobby Posted September 22, 2004 Posted September 22, 2004 I have used the following code to send some text to EditPad lite whisl minimized. There are limitation on what can be sent using "ControlSend" ControlSend("EditPad Lite","","TEditPadEditor1", "Text sent to a minimized window") Search the helpfile for ControlSend, also use AutoIt Window Spy (included with Autoit) for calssnames, windows title etc. Hope it helps CheersNobby
Guest BL@(K-R34P3R Posted September 22, 2004 Posted September 22, 2004 No there is a better way. Do this: Run("programblahblahblah") WinWaitActive("Blah") ;Here is what you want... WinSetState ( "title", "text", flag @SW_MINIMIZE) ;Then run the Send() command or whatever, this will not work with mouse clicks or anything using mouse movement, only stuff like send commands etc...
nobby Posted September 22, 2004 Posted September 22, 2004 Not a better way because as soon as another window gets the focus, the send is passed on to that window, not the minimized one. So if you want to browse the net or type a document whilst autoit is happily passing keystrokes to notepad in the background, you have to look at ControlSend CheersNobby
Guest BL@(K-R34P3R Posted September 22, 2004 Posted September 22, 2004 Yes, I thought I said that above, guess not. But yes, you can't do anything else while its running. But hopefully... you won't be sending too mcuh, like a 13 character string aka 13 9's =). I've got 3 computers running it right now.
emmanuel Posted September 22, 2004 Posted September 22, 2004 Yes, I thought I said that above, guess not. But yes, you can't do anything else while its running. But hopefully... you won't be sending too mcuh, like a 13 character string aka 13 9's =). I've got 3 computers running it right now. <{POST_SNAPBACK}>controlsend would let you do it at the same time as doing other things. "I'm not even supposed to be here today!" -Dante (Hicks)
Christopher Blue Posted September 22, 2004 Author Posted September 22, 2004 I implemented the ControlSend solution but I have found that the program *needs* focus to go from one stage to another so complete background operation appears impossible at this point. However, ControlSend itself did do what I needed it to do! Thank you nobby, BL@(K-R34P3R, and emmanuel for all of your help! If you wish to delve further into the focus problem, then the program I am trying to automate is Warcraft 3: The Frozen Throne. When one goes from one stage to another (say by hitting alt-g to play a custom game) Warcraft 3 will not fully arrive at the next stage (the custom game list in this case) until it has been given focus. Therefore any other keystrokes sent to Warcraft 3 are thrown away until it is given focus so that it may complete the stage-transition. Or at least that is my theory. :"> How would I circumvent or solve the focus-problem?
emmanuel Posted September 22, 2004 Posted September 22, 2004 I implemented the ControlSend solution but I have found that the program *needs* focus to go from one stage to another so complete background operation appears impossible at this point. However, ControlSend itself did do what I needed it to do! Thank you nobby, BL@(K-R34P3R, and emmanuel for all of your help! If you wish to delve further into the focus problem, then the program I am trying to automate is Warcraft 3: The Frozen Throne. When one goes from one stage to another (say by hitting alt-g to play a custom game) Warcraft 3 will not fully arrive at the next stage (the custom game list in this case) until it has been given focus. Therefore any other keystrokes sent to Warcraft 3 are thrown away until it is given focus so that it may complete the stage-transition. Or at least that is my theory. :"> How would I circumvent or solve the focus-problem? <{POST_SNAPBACK}>does controlfocus not work? "I'm not even supposed to be here today!" -Dante (Hicks)
JSThePatriot Posted September 22, 2004 Posted September 22, 2004 Have you thought about giving it a quick focus then minimizing and going on with the code? You can do that with the script I am sure. JS AutoIt Links File-String Hash Plugin Updated! 04-02-2008Â Plugins have been discontinued. I just found out. ComputerGetInfo UDF's Updated! 11-23-2006 External Links Vortex Revolutions Engineer / Inventor (Web, Desktop, and Mobile Applications, Hardware Gizmos, Consulting, and more)
Guest BL@(K-R34P3R Posted September 22, 2004 Posted September 22, 2004 JS, that is an awesome avatar!
Christopher Blue Posted September 22, 2004 Author Posted September 22, 2004 (edited) I am really sorry guys: I screwed up. Here is what I was trying to do: Send alt-g to window "Warcraft III". (To enter the custom game list screen) Send alt-c to window "Warcraft III". (To enter create custom game screen) Now I had read in the help documentation that ControlSend doesn't support ALT however I had thought that maybe the newest version did whenever it appeared that the alt-g command went through (my script would successfully tell the game to go to the custom game list). However what was really happening is that Warcraft III accepts both alt-g and (plain old) 'g' to go to the custom game list. So really it was taking in 'g' not alt-g. That is why alt-c failed: Warcraft III is not forgiving enough to take (plain old) 'c', only alt-c. I think I can get around the lack of the alt key by sending a few tabs and then the enter key (to focus on a button and push it). Sorry for the mix up! BTW, will ControlSend support the alt key in a later version of AutoIt? Edited September 22, 2004 by Christopher Blue
Christopher Blue Posted September 22, 2004 Author Posted September 22, 2004 (edited) Thank you all for the help so far, but now I am running into another problem: I am using this command to send text to a text box in Warcraft III: ControlSend("Warcraft III", "", "", "LOTR: The Ring Wars! DL ONLY", 1) Sometimes it shows up correctly, but more often it shows up something like this: LOTR: The ring wars1 dl oNly It is like the shift key has been pressed and depressed almost randomly throughout the text. I have used AutoItSetOption("SendKeyDelay", #) to slow down the the key input speed but the script will still output incorrectly most of the time. How must I go about fixing this problem? Edited September 22, 2004 by Christopher Blue
Christopher Blue Posted September 22, 2004 Author Posted September 22, 2004 I am using AutoIt v3.0.102.
Christopher Blue Posted September 23, 2004 Author Posted September 23, 2004 Thank you for the tip Larry! However I am still having trouble. Here is my new test code: #include <ControlSendPlus.au3> AutoItSetOption("SendKeyDelay", 5) ControlSendPlus("Warcraft III", "", "", "LOTR: The Ring Wars! DL ONLY", 1) However, I am still getting output like this: LOTR; the riNG WARS! dl ONLYand this: LOTR: THe ring wars! DL ONLYWhat am I doing wrong?
Christopher Blue Posted September 26, 2004 Author Posted September 26, 2004 I have not been able to figure it out yet, even looking at ControlSendPlus's source code. Perhaps someone can lend me some insight?
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