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

Reply via email to