Hi, > I guess I should send a WM_QUIT message but I don't know how.
Have you tried win32api.PostQuitMessage() in the event handler for Code 1? DS Sent from my iPhone > On 29 Nov 2024, at 18:00, Gauthier ABRIAL <g_abr...@hotmail.com> wrote: > > > Hello, > I'm looking for some advice on how to correctly handle events using win32com. > If I take the example of a very simple Excel automation, I tested two things. > Code1 below use pythoncom.PumpMessages() but I don't know how to stop it when > the Excel is closing. I guess I should send a WM_QUIT message but I don't > know how. > Code2 below use a while loop on pythoncom.PumpWaitingMessages() but once I > stop the loop the COM server freeze as it is waiting for the messages it > sends to be processed before closing. I guess I should pump all the remaining > messages but I don't know how. > Maybe I should use a totally different approach. > Thanks a lot for your help. > > G. > > -------------------- Code1 Starts ----------------------- > import win32com.client as win32 > import pythoncom > > #The event handlers > class wbEvents: > def OnBeforeClose(self, Cancel): > print('Closing Workbook') > # Send WM_QUIT here ? > > xlApp = win32.Dispatch("Excel.Application") #Open Excel > xlApp.Visible=True #Make Excel Visible > xlwb = xlApp.Workbooks.Add() #Create a workbook > ws=xlwb.Sheets("Sheet1") #Get the first worksheet > xl_events=win32.WithEvents(xlwb,wbEvents) #Add and Event handler > pythoncom.PumpMessages() > -------------------- Code1 Ends ----------------------- > > -------------------- Code2 Starts ----------------------- > import win32com.client as win32 > import pythoncom > import time > > #The event handlers > class wbEvents: > def OnBeforeClose(self, Cancel): > print('Closing Workbook') > global keepOpen > keepOpen = False > > xlApp = win32.Dispatch("Excel.Application") #Open Excel > xlApp.Visible=True #Make Excel Visible > xlwb = xlApp.Workbooks.Add() #Create a workbook > ws=xlwb.Sheets("Sheet1") #Get the first worksheet > xl_events=win32.WithEvents(xlwb,wbEvents) #Add and Event handler > # define initalizer > keepOpen = True > while keepOpen: > time.sleep(0.1) > pythoncom.PumpWaitingMessages() > -------------------- Code2 Ends ----------------------- > > _______________________________________________ > python-win32 mailing list > python-win32@python.org > https://mail.python.org/mailman/listinfo/python-win32
_______________________________________________ python-win32 mailing list python-win32@python.org https://mail.python.org/mailman/listinfo/python-win32