[python-win32] FireEvent : comtypes work but win32com fails, why?

Thomas Heller theller at ctypes.org
Wed Jun 25 16:06:26 CEST 2008


June Kim schrieb:
> IE's FireEvent works with a single argument, for example,
> FireEvent("onKeyUp"). However, it doesn't work with two arguments :
> FireEvent("onKeyUp",event).
> 
> But It works without a problem with comtypes.
> 
> See the following example to reproduce and compare:
> 
> 
> file: c:/temp/javascripttest/onkeyup.html
> 
> <html>
> <head>
> <title>onkeyup</title>
> <script language="javascript">
> function showmeevent() {
>   document.getElementById("here").innerHTML+="[+] "+event.keyCode +"<br/>";
>   document.lastKeyCode=event.keyCode;
> }
> </script>
> </head>
> </html>
> <input id="inp" onkeyup="showmeevent()"/>
> <div id="here"></div>
> </body>
> <body>
> 
[...]

> 
> Now with comtypes:
> 
>>>> from comtypes.client import CreateObject
>>>> ie2=CreateObject("InternetExplorer.Application")
>>>> ie2.Visible=True
>>>> ie2.Navigate('c:/temp/javascripttest/onkeyup.html')
> 0
>>>> e2=ie2.Document.CreateEventObject()
>>>> e2.keyCode=65
>>>> ie2.Document.all.inp.FireEvent("onkeyup",e2)
> True
>>>> ie2.Document.lastKeyCode
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "C:\Python25\Lib\site-packages\comtypes\__init__.py", line 216, in __geta
> ttr__
>     raise AttributeError(name)
> AttributeError: lastKeyCode
> 
> Accessing lastKeyCode from ie2.Document wasn't possible but the event
> obejct is passed successfully -- I see 65 appended to the document.
> 

I would guess that dynamically added attributes can only be accessed via
the IDispatchEx interface. Does anybody know if it is possible to access these
attributes with DispInvoke calls?

comtypes does not (yet?) support IDispatchEx.

Thomas



More information about the python-win32 mailing list