[python-win32] How to correctly handle events using win32com ?
David Sansom
david at elkpoint.co.uk
Sat Nov 30 05:04:52 EST 2024
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_abrial at 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 at python.org
> https://mail.python.org/mailman/listinfo/python-win32
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.python.org/pipermail/python-win32/attachments/20241130/7f6de6ef/attachment.html>
More information about the python-win32
mailing list