2009-08-07 29 views
7

Bazı COM nesnelerini kullanan python'da örnek bir uygulama yapmaya çalışıyorum. Ben Win32 üzerinde Python Programlama ünlü bölüm 12 okudum ama bu konuda sadece devletler: Bu kitabın kapsamı dışındadır, olmasına rağmenPython'da COM olayları tüketiliyor

Tüm olay işleme Normal IConnectionPoint arayüzleri, kullanılarak yapılır ve standart Python COM çerçevesi tarafından tamamen desteklenir.

Bu konuda biraz ışık tutabilir mi? Basit bir başlangıç ​​örneğine ihtiyacım var. Bu örnek kod ekleme gibi bir şey ben Excel otomatik değil elektronik tabloya

import win32com.client 
xl = win32com.client.Dispatch("Excel.Application") 
... 

cevap

6

için OnActivate olayı yakalamak için, ama başlangıç ​​için yeterli benzer olabilir Microsoft'un Speech API bazı kod kullanıyorum:

ana döngü daha fazla ayrıntı için

while not self.shutting_down.is_set(): 
     # Trigger the event handlers if we have anything. 
     pythoncom.PumpWaitingMessages() 
     time.sleep(0.1) # Don't use up all our CPU checking constantly 

Düzenleme: daha sonra bir ana döngüde

ListenerBase = win32com.client.getevents("SAPI.SpInProcRecoContext") 
class Listener(ListenerBase): 
    def OnRecognition(self, _1, _2, _3, Result): 
     """Callback whenever something is recognized.""" 
     # Work with Result 

    def OnHypothesis(self, _1, _2, Result): 
     """Callback whenever we have a potential match.""" 
     # Work with Result 

Bir şey olduğunda, geri arama hemen çağrılmaz; bunun yerine, bekleyen herhangi bir olay olup olmadığını kontrol eden ve daha sonra uygun geri çağrısı yapan PumpWaitingMessages() öğesini çağırmanız gerekir.

Bu sırada başka bir şey yapmak isterseniz, döngüyü ayrı bir iş parçacığında çalıştırmanız gerekir (iş parçacığı modülüne bakın); aksi halde sadece senaryonun dibinde oturabilir. Örneğimde ayrı bir iş parçacığında çalıştırıyordum çünkü bir GUI çalıştırıyordum; shutting_down değişkeni, iş parçacığının durmasını söylemek için kullanabileceğiniz bir iş parçacığıdır.

+0

Bunun için teşekkürler. Biraz ikinci detayı (döngü) detaylandırır mısınız - özür dilerim üzgünüm pyhton'da taze başlıyorum :). –

+0

Sorun değil, benim düzenleyeme bakın :) – Kiv

+0

:) Mesaj döngüsünün ne olduğunu biliyorum - pythoncom'u bulmakta zorlanıyorum - almam gereken bir paket mi? Ayrıca bir DispatchWithEvents yöntemi de var görüyorum - ben bu konu için zaman ayırdığınız zaman içine bakacağız. –