SAP热键到SAPI

时间:2018-04-17 17:30:25

标签: python

我是一个新手,开始在python中学习和开发程序我正在开发一个项目,需要通过音频队列通知用户。

我正在使用键盘模块(https://github.com/boppreh/keyboard)作为热键,因此当按下热键时它将运行一个功能。我的代码如下:

import win32com.client
from keyboard import add_hotkey

Hotkey = 'g'

add_hotkey(Hotkey, lambda: Notification('Hello'))

def Notification(value):
   speaker = win32com.client.Dispatch("SAPI.SpVoice")
   speaker.Speak(value)
   return 

我遇到的问题是,当运行时脚本崩溃,我无法解决错误的原因: Python Console with error

1 个答案:

答案 0 :(得分:0)

这是你想要做的事情: 从add_key回调调用时,需要对COM对象进行初始化。

这是官方文件:

  

在任何线程可以创建或操作COM对象之前,它必须   执行一些初步初始化以建立其关系   使用COM库。作为此过程的结果,COM创建了一个   适合初始化程序的公寓:CoInitialize   创建一个单线程单元(STA),而CoInitializeEx用   COINIT_MULTITHREADED标志产生一个多线程公寓。该   CoInitialize / CoInitializeEx调用不会初始化COM库   在全球范围内,只有调用线程使用它,因此它非常重要   请记住,这个初始化应该在每个线程上完成   基础。

了解更多initialization Link

以下是固定代码

import keyboard
import win32com.client
import pythoncom

Hotkey = 'g'


def Notification(value):
    pythoncom.CoInitialize()
    speaker = win32com.client.Dispatch("SAPI.SpVoice")
    speaker.Speak(value)


keyboard.add_hotkey(Hotkey, Notification, args=(["Hello"]))
keyboard.wait()