@David Sansom<mailto:da...@elkpoint.co.uk>: amazing that's exactly what I was looking for ! That works now, PumpMessages() is correctly returning when I call PostQuitMessage(). So the reason why Excel is not sending the WM_QUIT message by itself (or why PumpMessage() is not receiving it) is still unclear to me but I have a workable solution and I know that the way I use win32com seems to make sense (nobody gave me any pushback here on the way I use it). Thanks a lot everybody. G. ________________________________ De : David Sansom <da...@elkpoint.co.uk> Envoyé : 30 novembre 2024 05:04 À : Gauthier ABRIAL <g_abr...@hotmail.com> Cc : python-win32@python.org <python-win32@python.org> Objet : Re: [python-win32] How to correctly handle events using win32com ?
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