Much to my dismay, I found myself in a situation where the following hack
is useful. I shudder at the thought of actually using it because
of its inherent instability, but sometimes it's better than a poke in the
eye with C#.
If you're automating an application which, while executing a command, may pop
up error or warning messages and wait for user input, you may need to
explicitly send a keystroke to that application. Fortunately, this is
reasonably simple using
cscript.exe, the
WSH Shell object and VBscript:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.AppActivate ("Appname as it appears in the main window title")
WshShell.SendKeys "{ENTER}"
While testing this, I learnt that the application name parameter to
AppActivate
can actually be an abbreviation. For instance, if you run Word, its
main window title is usually something like "gazonk.doc - Microsoft Word".
AppActivate
actually uses a simple best-match algorithm so that
the following will still work as expected:
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.AppActivate ("Microsoft Word")
WshShell.SendKeys "foo"
The
SendKeys
method turns out to be pretty convenient since it allows to describe
non-printable characters with a special notation, such as
{BREAK}
for the Break key,
{PGUP}
and
{PGDN}
for moving pagewise,
{DEL}
,
{HOME}
, all the
function keys et cetera.
to top