Skype录音答录机编程思路和代码
2008-09-01 19:25:37 来源:WEB开发网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 函数发送给主窗口,至此,回放音频数据偷取成功了。
- ››Skype视频通话有望CES期间登录iPhone
- ››Skype官网出现iPhone应用帮助文档,随后被删除
- ››Skype新版整合Facebook增加视频会议功能
- ››Skype 2.0.1 for iPhone 评测
- ››Skype升级iPhone版应用 支持多任务处理
- ››Skype向所有设备和台式应用开放软件开发包
- ››Skype称将推多平台:支持手机与电视视频通话
- ››Skype终于出iPhone版了 还支持3G网络
- ››Skype 2.0 for iPhone 支持3G下工作
- ››Skype 2.0 for iPhone 已经可以工作在3G模式下
- ››Skype 周四登陆 Verizon 9 款黑莓 Android 手机
- ››Skype 发布 Symbian 应用 用户可拨打免费网络电话...
更多精彩
赞助商链接