Hello Newsgroup, I dug into this further and got it running in a thread. No change with the events, same behavior. I added to the working Appdeactivate event an vba routine to add a new drawing. Thus I had the focus when the event occurs and now I got the event. Naturally this is not desirable since the user has the focus when he adds a new drawing, but I want my program to get notified of this.
I installed python 3.3 and it didn't work at all for events. Here is my code: import win32com.client from pythoncom import com_error from pythoncom import Missing import pythoncom progid = 'Excel.Application' xl = win32com.client.Dispatch(progid) WEC = win32com.client.getevents(progid) class WE(WEC): def OnRelease(self): print ('OnExit Occurs when the application is about to exit.') xl.Visible = True xle = win32com.client.WithEvents(xl,WE) The last line fails with: result_class = new_type("COMEventClass", (events_class, user_event_class), {}) TypeError: Cannot create a consistent method resolution order (MRO) for bases AppEvents, WE Intellicad also fails with the same error. I am using XP 32bit. Anyone with a suggestion? I am free to use either python2 or python 3 as long as I do get all events. Thank you for your audience. Kind regards Johannes Frank 2013/2/6 Johannes Frank <jmfran...@gmail.com> > Hello Newsgroup, > > I am currently programming ProgeCAD an AutoCAD Clone and having > difficulties catching all events. > > My code: > > import win32com.client > import pythoncom,pywintypes > import time > import tkFileDialog > import tkSimpleDialog > import IntelliCAD > import sys > > icad_CLSID = '{77E49E57-976B-11CF-8CCB-00A0245B09EB}' > icad_ProgID = 'Icad.Application' > icad_mod = win32com.client.gencache.EnsureModule(icad_CLSID, 0,1,0) > > defaultNamedOptArg=pythoncom.Empty > defaultNamedNotOptArg=pythoncom.Empty > defaultUnnamedArg=pythoncom.Empty > > class WorkspaceEvents(IntelliCAD._IcadWorkspaceEvents): > def __init__(self, oobj=None): > IntelliCAD._IcadWorkspaceEvents.__init__(self, oobj) > > # If you create handlers, they should have the following prototypes: > def OnBeginFileDrop(self, FileName=defaultNamedNotOptArg, > Cancel=pythoncom.Missing): > print 'OnBeginFileDrop Occurs when a file is dropped on the > application window' > def OnNewDrawing(self): > print 'OnNewDrawing Occurs when a new drawing is about to be > created' > def OnAddinRun(self, AddinFunctionName=defaultNamedNotOptArg): > print 'OnAddinRun Occurs when the user runs an add-in function > from the command line' > def OnEndModal(self): > print 'OnEndModal Occurs when a modal dialog is closed' > def OnExit(self): > print 'OnExit Occurs when the application is about to exit.' > def OnLispCancelled(self): > print 'OnLispCancelled Occurs when evaluation of a LISP expression > is cancelled' > def OnNew(self, NewDocument=defaultNamedNotOptArg): > print 'OnNew Occurs when a new drawing has been created.' > def OnBeginOpen(self, DrawingName=defaultNamedNotOptArg): > print 'OnBeginOpen Occurs when a drawing is requested to be opened' > def OnEndSave(self, FileName=defaultNamedNotOptArg): > print 'OnEndSave Occurs when a request to save the drawing has > been completed' > def OnEndCommand(self, CommandName=defaultNamedNotOptArg): > print 'OnEndCommand Occurs when a command is completed' > def OnEndPlot(self, DrawingName=defaultNamedNotOptArg): > print 'OnEndPlot Occurs when drawing has been sent to the printer' > def OnSave(self, Document=defaultNamedNotOptArg): > print 'OnSave Occurs when a drawing is about to be saved.' > def OnBeginLisp(self, FirstLine=defaultNamedNotOptArg): > print 'OnBeginLisp Occurs when receives a request to evaluate a > LISP expression' > def OnEndOpen(self, DrawingName=defaultNamedNotOptArg): > print 'OnEndOpen Occurs after a drawing has been opened' > def OnBeginQuit(self, Cancel=pythoncom.Missing): > print 'OnBeginQuit Occurs when the application starts to shut > down. Returning False will terminate the shutdown.' > def OnReinitialize(self): > print 'OnReinitialize Occurs each time you open or create a > drawing' > def OnAppDeactivate(self): > print 'OnAppDeactivate Occurs when the application window is > deactivated' > def OnBeginSave(self, FileName=defaultNamedNotOptArg): > print 'OnBeginSave Occurs when receives a request to save the > drawing' > def OnBeforeExit(self, Cancel=pythoncom.Missing): > print 'OnBeforeExit Occurs when the application starts to shut > down. Returning False will terminate the shutdown.' > def OnEndLisp(self): > print 'OnEndLisp Occurs when evaluation of a LISP expression is > completed' > def OnWindowChanged(self, vicWindowState=defaultNamedNotOptArg): > print 'OnWindowChanged Occurs when window state is changed' > def OnBeginPlot(self, DrawingName=defaultNamedNotOptArg): > print 'OnBeginPlot Occurs when receives a request to print drawing' > def OnAppActivate(self): > print 'OnAppActivate Occurs when the application window is > activated' > def OnStartup(self): > print 'OnStartup Occurs when the application is starting up.' > # def OnSysVarChanged(self, SysVarName=defaultNamedNotOptArg, > NewVal=defaultNamedNotOptArg): > # print 'Occurs when the value of a system variable is changed' > def OnBeginModal(self): > print 'OnBeginModal Occurs when a modal dialog is about to be > displayed' > def OnWindowMovedOrResized(self, HWNDFrame=defaultNamedNotOptArg, > bMoved=defaultNamedNotOptArg): > print 'OnWindowMovedOrResized Occurs when window is moved or > resized' > def OnClose(self, Document=defaultNamedNotOptArg): > print 'OnClose Occurs when a drawing is about to be closed.' > def OnBeginCommand(self, CommandName=defaultNamedNotOptArg): > print 'OnBeginCommand Occurs when a command is called' > def OnOpen(self, Document=defaultNamedNotOptArg): > print 'OnOpen Occurs after a drawing has been opened.' > > > class DocumentEvents(IntelliCAD._EIcadDocument): > def __init__(self,oobj=None): > IntelliCAD._EIcadDocument.__init__(self, oobj) > > # If you create handlers, they should have the following prototypes: > > def OnDeactivate(self): > print 'OnDeactivate Occurs when a document window is deactivated' > def OnBeginDocClose(self, Cancel=pythoncom.Missing): > print 'OnBeginDocClose Occurs when IntelliCAD receives a request > to close the drawing' > def OnBeginPlot(self, DrawingName=defaultNamedNotOptArg): > print 'OnBeginPlot Occurs when receives a request to print drawing' > def OnBeginClose(self): > print 'OnBeginClose Occurs when IntelliCAD receives a request to > close the drawing' > def OnEndCommand(self, CommandName=defaultNamedNotOptArg): > print 'OnEndCommand Occurs when a command completed' > def OnEndPlot(self, DrawingName=defaultNamedNotOptArg): > print 'OnEndPlot Occurs when drawing has been sent to the printer' > def OnSave(self): > print 'OnSave Occurs when a drawing is about to be saved.' > def OnBeginLisp(self, FirstLine=defaultNamedNotOptArg): > print 'OnBeginLisp Occurs when receives a request to evaluate a > LISP expression' > def OnSelectionChanged(self): > print 'OnSelectionChanged Occurs when the current selection set is > changed' > def OnLayoutSwitched(self, LayoutName=defaultNamedNotOptArg): > print 'OnLayoutSwitched Occurs after switching to a different > layout' > def OnBeginSave(self, FileName=defaultNamedNotOptArg): > print 'OnBeginSave Occurs when receives a request to save the > drawing' > def OnEndLisp(self): > print 'OnEndLisp Occurs when evaluating of a LISP expression > completed' > def OnBeginDoubleClick(self, PickPoint=defaultNamedNotOptArg): > print 'OnBeginDoubleClick Occurs when the user double-clicks on > the drawing window' > def OnWindowChanged(self, vicWindowState=defaultNamedNotOptArg): > print 'OnWindowChanged Occurs when window state changed' > def OnBeginRightClick(self, PickPoint=defaultNamedNotOptArg): > print 'OnBeginRightClick Occurs when the user right-clicks on the > drawing window' > def OnLispCanceled(self): > print 'OnLispCanceled Occurs when evaluating of a LISP expression > canceled' > def OnActivate(self): > print 'OnActivate Occurs when a document window is activated' > def OnEndSave(self, FileName=defaultNamedNotOptArg): > print 'OnEndSave Occurs when a request to save the drawing has > been completed' > def OnWindowMovedOrResized(self, HWNDFrame=defaultNamedNotOptArg, > bMoved=defaultNamedNotOptArg): > print 'OnWindowMovedOrResized Occurs when window moved or resized' > def OnClose(self,cancel=pythoncom.Missing): > print 'OnClose Occurs when a drawing is about to be closed.' > def OnBeginCommand(self, CommandName=defaultNamedNotOptArg): > print 'OnBeginCommand Occurs when receives a command' > def OnOpen(self): > print 'OnOpen Occurs after a drawing has been opened.' > > icad = win32com.client.Dispatch(icad_ProgID,'Administrator') > app = icad.Application > ws = icad.Workspace > ad = icad.ActiveDocument > ws_ev = win32com.client.WithEvents(app,WorkspaceEvents) > doc_ev = win32com.client.WithEvents(ad,DocumentEvents) > > #pythoncom.PumpMessages() > > import Tkinter > root = Tkinter.Tk() > root.mainloop() > > Some workspace events are catched (like OnAppActivate and OnAppDeactivate) > or for document events (OnActivate, OnDeactivate) but most are not. > For instance opening drawings or adding new ones is ignored. If however I > call the method for creating new documents or opening existing the events > work. So the hint might be it has something to do with the focus. > In VB2010 everything works as exspected so I think the program is ok. > > Neither root.mainloop() nor pythoncom.PumpMessages() work. I also tried a > different implementation of the events: > > icad = IntelliCAD.Application() > WSClass = ClassType("COMEventClass", (icad.__class__, icad.default_source, > WorkspaceEvents), {'__setattr__': win32com.client._event_setattr_}) > wse = WSClass(icad._oleobj_) > icad.default_source.__init__(wse,wse) > icad = win32com.client.EventsProxy(wse) > > ...but the behavior is just the same. > > Could threading be a solution to my problem? I've never done threading > before and I am relativly new to python so if anyone could give me a > starting hand for threading I'll be glad. > > Any other suggestions are also welcome. > > Thank you for your audience. > > Kind regards > > Johannes Frank > > > > > > > > -- > Dipl.-Ing. (FH) Johannes-Maria Frank > Bildungsberater > Königsberger-Str. 19b > 76139 Karlsruhe > Tel. +49(170) 3833849 > e-mail: jmfran...@gmail.com > -- Dipl.-Ing. (FH) Johannes-Maria Frank Bildungsberater Königsberger-Str. 19b 76139 Karlsruhe Tel. +49(170) 3833849 e-mail: jmfran...@gmail.com
_______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32