WEB开发网
开发学院软件开发VC Skype录音答录机编程思路和代码 阅读

Skype录音答录机编程思路和代码

 2008-09-01 19:25:37 来源:WEB开发网   
核心提示: CAPIHook g_waveInOpen("winmm.dll", "waveInOpen", (PROC) Hook_waveInOpen, TRUE);这段代码实现了 "winmm.dll" 库中 "waveInO

CAPIHook g_waveInOpen("winmm.dll", "waveInOpen", (PROC) Hook_waveInOpen, TRUE);

这段代码实现了 "winmm.dll" 库中 "waveInOpen"函数地址的修改,修改后的地址为“Hook_waveInOpen”,也就是说,以后Skype调用函数“waveInOpen”系统会自动先调用我们的函数“Hook_waveInOpen”。其他几个函数修改原理相同。

至此我们已经成功地修改了Win32 API函数,由于Skype在调用这些API函数时会将音频数据传递给系统,刚好系统又先调用我们的函数,那我们就可以得到Skype的音频数据,看下面代码:

//
// 修改 waveOutWrite 函数地址
//
CAPIHook g_waveOutWrite("winmm.dll", "waveOutWrite", (PROC) Hook_waveOutWrite, TRUE);
//
// This is the waveOutWrite replacement function
//
MMRESULT WINAPI Hook_waveOutWrite ( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh )
{
//
// Skype 在调用 waveOutWrite 函数进行音频回放(播放对方的声音)时我们将得
// 到这些音频数据,这些数据就存放在 pwh->lpData 缓冲中,我们调用
// SendDataToMainWnd 函数将数据发送至主窗口进行压缩和保存处理
//
SendDataToMainWnd ( pwh->lpData,
pwh->dwBytesRecorded > 0 ? pwh->dwBytesRecorded : pwh->dwBufferLength,
ENUM_CATCHSOUNDTYPE_waveOutWrite );
// Call the original waveOutWrite function
MMRESULT nResult = ((PFN_waveOutWrite)(PROC) g_waveOutWrite )
(hwo, pwh, cbwh);
// Return the result back to the caller
return(nResult);
}

以上代码中将“偷取”到的音频数据通过 SendDataToMainWnd 函数发送给主窗口,至此,回放音频数据偷取成功了。

上一页  1 2 3 4 5 6  下一页

Tags:Skype 录音 答录机

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接