Scripting Windows GUI application with Python (SendKeys)

aholt1 at my-dejanews.com aholt1 at my-dejanews.com
Thu May 20 20:29:36 EDT 1999


In article <mt2.0-3294-
927071760 at news.informatik.uni-bonn.de>,
  Christian Lemer <Christian.Lemer at usrconsult.be>
wrote:
> Dear all,
>
> Currently we use WinBatch to automate some
tests and productions
> application under Windows NT.
>
> One year ago, we switched from Perl to Pyton as
script language under
> unix.
>
> I wonder if it is possible to drive a Windows
GUI application (using
> keybord commands) like it is possible in
Winbatch with Python under
> Windows?
>
> I installed also the windows extensions but
couldn't find the correct
> way to send a key to an application.
>
> Thanks in advance for your help.
>
> Chris.
>
> ==
> Christian
LEMER                                    tel
+32.10.65.44.11
> UsrConsult
S.P.R.L                                 fax
+32.10.65.44.10
> rue Margot, 37

http://www.usrconsult.be
> B-1457 Nil St Vincent
mailto:Christian.Lemer at usrconsult.be
>
Hello,

Good news.  ActiveX wrappers for the Visual Basic
SendKeys method can be found at an elegant site
for Windows Scripting Host files:

http://cwashington.netreach.net/site/downloads.asp

One is for Win95 and the other for Win98.
They're small -- only 11K and 24K respectively.
The HTML doc describes how to use them with
VBScript and JScript, not Python, but the
procedure is much the same.  Here's what you do:

1.  After unzipping file
Send_Key_Strokes_DLL_for_vb5_runtimes.zip,
register the library so that the COM Makepy
utility can find it by running regsvr32:

c:\ regsvr32 C:\Windows\System\SKey.dll (or
wherever you put the file)

2.  From the Python Tools menu, select "COM
Makepy utility".  From the list of type
libraries, select "SendKeys ActiveXDLL (4.0)."
(The 8.0 version next to it is for VB6.)  Press
OK to make a COM interface file.  After a few
seconds, makepy will print the long class ID of
the library, but not the name needed by
win32com.client to use it.  To find it, open the
file generated by makepy in
\python\win32com\gen_py and search for a phrase
beginning with
"This CoClass is known by the name".  What
follows is the name needed by win32com.client.
As it turns out, the sendkeys name
is 'SKey.SKeys'.

3.  Now, import the library so Python can use it:

>>> import win32com.client
>>> sendkeys = win32com.client.Dispatch
("Skey.Skeys")

4.  Here's an example script for exercising
WordPad:

import win32api, win32ui, win32con,
win32com.client

sendkeys = win32com.client.Dispatch("Skey.Skeys")

def wait(seconds=1,message=None):
        """pause Windows for ? seconds and print
an optional message """
        win32api.Sleep(seconds*1000)
        if message is not None:
sendkeys.SendKeystrokes(message)


def test_sendkeys_using(target_app="c:\\Program
Files\\Accessories\\Wordpad"):
        """
        Test free sendkeys OCX 'Skey.Skeys' using
the Notepad app:
                sendkeys =
win32com.client.Dispatch("Skey.Skeys")
        """
        win32api.WinExec(target_app)
        if target_app == "c:\\Program
Files\\Accessories\\Wordpad":
                target_class = "WordPadClass"
        else:
                target_class = target_app

        target = win32ui.FindWindow
(target_class,None)
        target.ShowWindow(win32con.SW_NORMAL)

        import winsound
        winsound.PlaySound("c:\\downloads\\zelda
music\\zelda_theme",winsound.SND_ASYNC|winsound.SN
D_LOOP)

        target_title = "Sendkeys Example"
        target.SetWindowText(target_title)
        # sendkeys.ActivateApp(target_title)

        wait(1)
 	wait(1,"SendKeys {(}Skey.dll{)}+{HOME}")

        # Format/Font dialog
 	wait(1,"%O")# Format menu
 	wait(2,"{ENTER}")# Font dialog
 	wait(1,"{TAB}")# Change style
 	wait(1,"Bold") # Enter Bold style
 	wait(1,"{TAB}")
 	wait(1,"{TAB}")
  	wait(2,"{ENTER}")

  	wait(1,"{END}{ENTER}")
  	wait(1,"{- 50}{ENTER}") # 50 dashes

        wait(1,"%O") # Format menu
        wait(1,"{DOWN}") # Bullet style
        wait(1,"{ENTER}")

  	wait(1,"ActiveX wrapper for the Visual
Basic SendKeys method{ENTER}")
  	wait(1,"Also includes ActivateApp{(}
with_window_title{)} method{ENTER}")
 	wait(1,"Uses VB library MSVBVM50.DLL or
MSVBVM60.DLL{ENTER}")
 	wait(1,"Written by Christopher Bradford
{ENTER}")
 	wait(1,"Can be downloaded at an elegant
Windows Scripting Host web site:{ENTER}")
 	wait(1,"%OB{TAB}
http://cwashington.netreach.net/site/downloads.asp
{ENTER}")

        wait(1,"{ENTER 5}Zelda's Theme courtesy
of Nintendo")

 	winsound.PlaySound("c:\\downloads\\zelda
music\\zelda_theme",winsound.SND_PURGE)


(The Zelda theme is at www.zelda64.com).

Hope this helps.  At least this will work until
someone builds an extension that doesn't require
the runtime VB.




--== Sent via Deja.com http://www.deja.com/ ==--
---Share what you know. Learn what you don't.---




More information about the Python-list mailing list