私はExcelを自動化していませんが、MicrosoftのSpeech APIのコードを使用しています。これらのコードは、使い始めるのに十分似ている可能性があります。
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
その後、メインループで:
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
メインループの詳細については、編集してください。
何かが起こっても、コールバックはすぐには呼び出されません。代わりに、PumpWaitingMessages()を呼び出す必要があります。これは、待機中のイベントがあるかどうかを確認してから、適切なコールバックを呼び出します。
これが発生している間に何か他のことをしたい場合は、別のスレッドでループを実行する必要があります(スレッドモジュールを参照)。それ以外の場合は、スクリプトの下部に配置できます。私の例では、GUIも実行していたため、別のスレッドで実行していました。shutting_down変数はthreading.Eventであり、ループしているスレッドに停止するように指示するために使用できます。