zoukankan      html  css  js  c++  java
  • 把qq信息用语音读出的几个问题

         选择自 psprite 的 Blog

    读出qq信息需要涉及到几个问题:

    1、就是要利用到microsoft speech sdk 5.1开发包做为文本语音的转换

    2、就是如何提取出qq窗口中需要的信息

    首先需要把qq信息设定为自动弹出

    这样程序可以动态地捕捉到弹出的qq窗口

    为其分别开起一个发声线程,或者把信息加到特定的信息队列以便依次读出


     

    HWND g_hParantWnd = ::FindWindow(NULL, "查看消息");
     if (g_hParantWnd )
     {  
        m_client=AfxBeginThread(RUNTIME_CLASS   ( CServerThread),THREAD_PRIORITY_ABOVE_NORMAL,0,0,NULL );
      ((CServerThread*)m_client)->ThreadProc (g_hParantWnd);
        ThreadProc,&g_hParantWnd, CREATE_SUSPENDED,NULL);
    }


     另外需要说明的是各个重要的信息窗口的id号


     

    HWND hChildQQCode = ::GetDlgItem(g_hParantWnd, 223);//发信人的id
    HWND hChildQQName = ::GetDlgItem(g_hParantWnd, 285);//发信人的昵称
    HWND hChildQQTime = ::GetDlgItem(g_hParantWnd, 1078);//发信时间

    但是更重要的是文本信息窗口,文本信息窗口采用的是CRichEditCtrl形式

    因此需要绑定工作

    HWND hWnd = ::FindWindowEx(g_hParantWnd, NULL, "AfxWnd42", NULL);
          HWND hChildQQText = ::GetDlgItem(hWnd, 896);//文本的id

         CRichEditCtrl  x;
         x.Attach(hChildQQText);//绑定
         int nLineCount = x.GetLineCount();
         for ( int j=0; j    {
              x.GetLine(j, Text, 255);
              list->InsertString (i++,Text);
              str.Format ("%s",Text);
              pSpVoice->Speak(str.AllocSysString(), SPF_DEFAULT, NULL);

              //调用microsoft speech sdk接口

         }
         x.Detach();
         ::SendMessage(g_hParantWnd, WM_CLOSE, 0, 0);//关闭qq消息框


    至于microsoft speech sdk 5.1的调用,基本上就是对其com特定接口函数的操作

    首先包含


     

    #include

    #include

     ISpObjectToken * pSpObjectToken ;



    pSpObjectToken = NULL;
     if (FAILED(CoInitialize(NULL)))
     {
      AfxMessageBox("Error to intiliaze COM");
      return false;
     }

    pSpVoice = NULL;
    HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL,
      IID_ISpVoice, (void **)&pSpVoice);
    SUCCEEDED(SpFindBestToken(SPCAT_VOICES, L"language=804",
      NULL, &pSpObjectToken));//804为中文语音
    pSpVoice->SetVoice(pSpObjectToken);


    之后就可以如先前代码中的

    pSpVoice->Speak(str.AllocSysString(), SPF_DEFAULT, NULL);

    读取相应的信息了。

    通过以上的操作,完全可以做一款,对qq信息的分离提取,并加入语音的小软件

    适合于在主人不在时信息的记录,或主人做其他事情而不能留意显示器时,可以自动地为之读出需要的信息。

    以上内容出于自娱自乐,希望老师们多多指导,谢谢

  • 相关阅读:
    阿里取消周报
    摇滚明星原则
    t
    B树、B+树索引算法原理(下)
    订单业务楼层化 view管理器和model管理器进行了model和view的全面封装处理 三端不得不在每个业务入口上线时约定好降级开关,于是代码中充满了各种各样的降级开关字段
    单元测试
    项目管理图 有任务分解、技术风险 风险预案
    CPU飙高,系统性能问题如何排查?

    如何让淘宝不卡顿? 读写比例 动态扩容 分布式化路线 mysql 优化
  • 原文地址:https://www.cnblogs.com/huqingyu/p/45057.html
Copyright © 2011-2022 走看看