首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python热键到SAPI

Python热键到SAPI
EN

Stack Overflow用户
提问于 2018-04-17 17:30:24
回答 1查看 72关注 0票数 1

我是一个刚开始学习和开发python程序的新手,我目前正在从事一个项目,这个项目需要一个带有音频队列的用户通知。

我使用键盘模块(https://github.com/boppreh/keyboard)作为热键,所以当按下热键时,它将运行一个函数。我的代码如下:

代码语言:javascript
复制
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控制台

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-17 17:46:24

下面是您想要做的事情:在从add_key回调调用时,需要对COM对象进行协同初始化。

这是正式文件:

在任何线程创建或操作COM对象之前,它必须执行一些初步初始化才能建立与COM库的关系。由于这个过程,COM创建了一个适合初始化例程的单元: CoInitialize创建了一个单线程单元(STA),而带有COINIT_MULTITHREADED标志的CoInitializeEx生成了一个多线程单元。CoInitialize/CoInitializeEx调用不会全局初始化COM库,只初始化调用线程的使用,因此必须记住,这种初始化应该在每个线程的基础上进行。

关于更多的初始化链路

下面的是固定代码

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49884157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档