语音控制系统打开或关闭系统应用程序

from win32com.client import constants
import win32com.client
import pythoncom
import os

speaker = win32com.client.Dispatch("SAPI.SPVOICE")


class SpeechRecognition:
    def __init__(self,wordsToAdd):
        self.speaker=win32com.client.Dispatch("SAPI.SpVoice")
        self.listener=win32com.client.Dispatch("SAPI.SpSharedRecognizer")
        self.context=self.listener.CreateRecoContext()
        self.grammar=self.context.CreateGrammar()
        self.grammar.DictationSetState(0)
        self.wordsRule=self.grammar.Rules.Add("wordsRule",constants.SRATopLevel+constants.SRADynamic,0)
        self.wordsRule.Clear()
        [self.wordsRule.InitialState.AddWordTransition(None,word)for word in wordsToAdd]
        self.grammar.Rules.Commit()
        self.grammar.CmdSetRuleState("wordsRule",1)
        self.grammar.Rules.Commit()
        self.eventHandler=ContextEvents(self.context)
        self.say("Startedsuccessfully")

    def say(self,phrase):
        self.speaker.Speak(phrase)

class ContextEvents(win32com.client.getevents("SAPI.SpSharedRecoContext")):
    def OnRecognition(self,StreamNumber,StreamPosition,RecognitionType,Result):
        newResult=win32com.client.Dispatch(Result)
        print("说:",newResult.PhraseInfo.GetText())
        s = newResult.PhraseInfo.GetText()
        if s == "记事本":
            os.system("start notepad")
        elif s == "画图板":
            os.system("start mspaint")

if __name__ == "__main__":
    speaker.Speak("语音识别开启")
    wordsToAdd = ["关机", "取消关机", "记事本", "画图板", "写字板", "设置", "关闭记事本"]
    speechReco = SpeechRecognition(wordsToAdd)
    while True:
        pythoncom.PumpWaitingMessages()

 

posted @ 2018-08-26 22:15  鑫时代程序员  阅读(628)  评论(0编辑  收藏  举报