把qq信息用语音读出的几个问题

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

读出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信息的分离提取,并加入语音的小软件

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

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航