Radu Adrian Ciora schrieb:
> Hi, this is the sencond time I try to post to this mailing list but I
> do this because I don't think I succeded the first time, as I didn't
> receive my message.(Sorry for the duplication if any.) I've tried to
> modify the unittest that tests the ShowEvents method like this:
>
> def test(self):
> # Start IE, call .Quit(), and check if the
> # DWebBrowserEvents2_OnQuit event has fired. We do this by
> # calling ShowEvents() and capturing sys.stdout.
> #o = comtypes.client.CreateObject("InternetExplorer.Application")
> o = comtypes.client.CreateObject("Word.Application")
> conn = comtypes.client.ShowEvents(o)
> o.Quit()
> del o
>
> self.pump_messages_with_timeout(1000)
>
> stream = sys.stdout
> stream.flush()
> sys.stdout = self.old_stdout
> output = stream.getvalue().splitlines()
> print "output is: "
> print output
>
> #self.failUnless('# event found: DWebBrowserEvents2_OnMenuBar' in
> output)
> #self.failUnless('Event DWebBrowserEvents2_OnQuit(None)' in output)
>
>
>
> When I put "Word.Application" insead of
> "InternetExplorer.Application", I don't get to see any events caught
> by the ShowEvents method.
I think there are no events fired in the code you execute above.
The following code works for me in the Windows command prompt:
c:\>python
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys; sys.coinit_flags = 0
>>> from comtypes.client import CreateObject, ShowEvents
>>> word = CreateObject("Word.Application")
>>> conn = ShowEvents(word)
# event found: ApplicationEvents_Startup
# event found: ApplicationEvents_Quit
# event found: ApplicationEvents_DocumentChange
>>> word.Visible = True
>>> Event ApplicationEvents_DocumentChange(None)
Event ApplicationEvents_Quit(None)
>>>
A few comments about this code:
1. 'word.Visible = True' displays the Word window on the screen. Then I
created a new document
by selecting 'New' from the menu in Word, this led to the 'Event
ApplicationEvents_DocumentChange(None)'.
Finally I finished Word, again by using the menu in Word, which led to the
second event.
2. 'import sys; sys.coinit_flags = 0' initializes COM for a multithreaded
appartment.
Must be executed before importing comtypes; comtypes looks for this attribute
to determine
how COM should be initialized.
A mutilthreaded appartment is very useful if you want to work with COM in a
console program where
the main thread does not have a message loop; it avoids that you have to create
a messageloop yourself.
If you execute the code in PythonWin, for example, you should NOT set
sys.coinit_flags to zero.
This is for two reasons: First, Pythonwin has already initialized COM, and it
cannot be initialized
a second time in a different threading mode - you will get an exception if you
try this.
Second, it is not even needed to create a messageloop since PythonWin - as a
GUI application -
already has a messageloop.
Note that all this isn't even comtypes specific - win32com behaves in exactly
the same way.
Hope this helps,
Thomas
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
comtypes-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/comtypes-users