Your pseudocode it a tad too simple. Once you determine the current foreground application, you'll need to find out which of it's windows or controls has the focus and obtain a handle to it. Then you'll need to determine if the control is of a type that will accept keystrokes.
Detecting that it's an editable text control isn't enough as it may be set readonly. Or it could be programmed to accept only numbers. Or a limited number of keystrokes, and the user may have already type something. If the user has highlighted the existing contents, your insertion will overwrite that. Same is true if the keyboard is in overwrite state.
Finally, how will your application decide when to send the keystrokes?
As by implication, it will not be in the foreground, it will not be in a position to accept user initiation of the insertion; and if you do it at some predetermined time or after some number of elapsed seconds, how will you know that the right application is in the foreground?
What you are asking to do is possible with Win32::GuiTest, but it is definitely not trivial. Depending upon what you are actually trying to achieve, it may well be easier to use an existing solution.
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
| [reply] |
#!perl
use utf8;
use Win32::GuiTest qw(SendKeys);
$Win32::GuiTest::debug = 1;
SendKeys('Hello from another program! ☻ aáàâāăą');
That was easy. But in the foreground application, I get
Hello from another program! aÄÄÄ
What's that now? | [reply] [d/l] |
That is the symptom of the use of different character encodings.
I suppose, by the look of it, that you sent a string in Unicode. The receiving application either didn't interpret it as Unicode or is not able to render it on screen.
| [reply] |
You may find Win32::GuiTest helps. Look for SendKeys.
DWIM is Perl's answer to Gödel
| [reply] |
There really isn't any straightforward way to easily automate this. That's because the Perl program and the editor don't have any control over one another.
If you don't mind being the conduit yourself, and you're just interested in getting data from your Perl program into your text editor (whichever editor that may be), I'd suggest saving the data you want to import to a file.
It's unclear to what extent you know Perl, but if you are just beginning, a good place to look would be open and print, for the output of data.
Then, once you're file has been written, the mechanics of reading it into the editor (or whatever other program) will depend entirely on that program. In vim and gvim, for example, the command :r will read a file.
Alternatively, you could redirect the results of your Perl program into a file, and then read it in, assuming that the output is exactly what you want to import.
Finally, both in Windows and Linux, if you're in a windowing environment, you can use cut (or copy) and paste the text that you need.
But as far as an automated process goes, especially in an editor (which is waiting for user-input), there isn't really a way to do it.
s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/
| [reply] |
In the spirit of TMTOWTDI, you may also wish to look at Win32::Clipboard and kin. I have assembled Super Search results below.
There is also a very nice little utility called, predictably, "Clipboard" which allows you to capture output from a DOS command prompt and copy it to the Windows Clipboard. The article may be found here: Print From Any Console Application, by Bill Wagner (a free, AFAIK, registration is required). If you go to Visual Studio Magazine and type vsep030228cs into the "Locator+ Code" field, you should be able to download the C# source as a .zip file. Usage is as follows:
Prompt> dir | clipboard -c
..copies to the clipboard.
Prompt> dir | clipboard -p
.. Prints the output
Prompt> dir | clipboard -c -p
Copies to the clipboard, and prints it.
HTH,
| [reply] [d/l] |
| [reply] |
| [reply] |