怎么把mp3转发微信语音发出去,从技术角度分析可行性

news/2025/1/19 14:49:20/

有什么需要帮助的,看不明白的 ,可以加微信 258032791

做微信营销的朋友,很多喜欢做群营销,个人营销,

这个时候,如果人工一句句话去说,肯定能累个半死,如果每天应付几百人

能把你累虚脱,那么从技术角度上来讲,能不能实现把事先准备的文字,语音,视频转发到微信里面 ,

代替人工操作的 ??

答案当然是可以的,从技术角度上来讲,一点问题都没有,接下来我和大家分析下怎么做!

我通过技术手段实现了一个简单的例子,有兴趣的 ,可以学习下 ,

首先我们先看下效果  

http://8h7s.cn/index.php/2018/10/15/wx_convert/

接下来给大家上几个图 

这是我写的一个小例子,实现准备需要转发的文字,mp3音频,mp4视频 

文章转发功能 

视频转发功能 

 

要实现微信多开和音视频发送的方法很多,

这个案例所用到的技术点 ,在这里列举下 

1:雷电模拟器,可以多开,可以一台机器开 无数个,根据机器性能不一样,数量有所不同

2:需要用到按键精灵脚本,这个主要是接收主控程序指令 

3:主控程序需要用到 api 拦截技术  ,C++通常使用detour api拦截库 

 

接下来大家大概讲讲原理 ,因为篇幅有限,在我的微信   有对应的教材  

 

模拟器主要是实现多开,这个没有啥好说 ,雷电模拟器还可以实现虚拟定位,硬件模拟 等接口也是开放的 ,所以非常简单 

 

按键精灵对应的代码也超级简单 ,在这里我贴出 代码供大家参考  

 

这里面的难点在于 如何 转发语音和 直播视频,

转发语音,首先我们先要知道模拟器,它肯定是需要录制 麦克风数据的,这个时候我们可以给 

麦克风下一个hook 钩子 ,WAVEIN WAVEOUT ,这些关键的api 上钩子

typedef MMRESULT (WINAPI *PFN_waveInOpen) ( LPHWAVEIN phwi,

                      UINT uDeviceID,

                    LPWAVEFORMATEX pwfx,

                    DWORD dwCallback,

                    DWORD dwCallbackInstance,

                    DWORD fdwOpen );

typedef MMRESULT (WINAPI *PFN_waveInClose) ( HWAVEIN hwi );

typedef MMRESULT (WINAPI *PFN_waveOutOpen) ( LPHWAVEOUT phwo,

                    UINT uDeviceID,

                    LPWAVEFORMATEX pwfx,

                    DWORD dwCallback,

                    DWORD dwCallbackInstance,

                    DWORD fdwOpen );

typedef MMRESULT (WINAPI *PFN_waveOutClose) ( HWAVEOUT hwo );

typedef MMRESULT (WINAPI *PFN_waveInPrepareHeader) ( HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh );

typedef MMRESULT (WINAPI *PFN_waveOutWrite) ( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh );

 

//

// 修改Win32 API函数地址

//

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

CAPIHook g_waveInClose("winmm.dll""waveInClose", (PROC) Hook_waveInClose, TRUE);

CAPIHook g_waveOutOpen("winmm.dll""waveOutOpen", (PROC) Hook_waveOutOpen, TRUE);

CAPIHook g_waveOutClose("winmm.dll""waveOutClose", (PROC) Hook_waveOutClose, TRUE);

CAPIHook g_waveInPrepareHeader("winmm.dll""waveInPrepareHeader", (PROC) Hook_waveInPrepareHeader, TRUE);

CAPIHook g_waveOutWrite("winmm.dll""waveOutWrite", (PROC) Hook_waveOutWrite, TRUE);

 

至此,通话过程中音频输入和输出的数据(即对方讲话和我自己讲话的声音)已经全部“偷取”到了,接下来只要将事先准备好的mp3 输送出去即可,当然有些工具偷取 录音的 原理也是一个鸟样,效果一般,但用做电话录音足亦。

有什么不明白的,可以加我微信 258032791  ,有详细教程和源码 

 

 

视频数据切换 原理也是类似,当然有些人说用 虚拟摄像头VCam 也可以达到同样的效果 ,

其实用虚拟摄像头,很多虚拟机不支持,国外的 Genymotion 貌似支持,但是也不好用

这个我也测试过,大家可以去试试 

 

HHOOK g_hHook    = NULL;

HINSTANCE g_hInst= NULL;

//HWND g_hInst =NULL;

/*

//目标函数指针

camerahook g_hcamera=NULL;//<-capCreateCaptureWindowA函数指针

 

//Trampoline函数指针

camerahook r_hcamera=NULL;//<-capCreateCaptureWindowA Trampoline函数指针

*/

 

HWND (WINAPI * camerahook)(

        LPCSTR lpszWindowName,

        _In_ DWORD dwStyle,

        _In_ int x, _In_ int y, _In_ int nWidth, _In_ int nHeight,

        _In_opt_ HWND hwndParent, _In_ int nID) =capCreateCaptureWindowA;

 

 

void InstallHook();//<-Detours钩子初始化函数

void UninstallHook();//<-Detours钩子卸载函数

//HWND WINAPI capCreateCaptureWindowA_mine();//<-capCreateCaptureWindowA的替换函数

 

 

//加入目标函数的Detour函数

HWND WINAPI capCreateCaptureWindowA_mine( LPCSTR lpszWindowName,

        _In_ DWORD dwStyle,

        _In_ int x, _In_ int y, _In_ int nWidth, _In_ int nHeight,

        _In_opt_ HWND hwndParent, _In_ int nID)

{

    int mbox=NULL;

    mbox=MessageBoxA(hwndParent,"有程序正在启用摄像头,是否需要拦截?","提示",MB_YESNO);

    if(IDOK==mbox)

    {

        return 0;

    }

    else

    {

        return camerahook(lpszWindowName,dwStyle,x,y,nWidth,nHeight,hwndParent,nID);

    }

}

 

BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD  fdwReason, LPVOID lpvReserved )

{

    g_hInst = hinstDLL;

 

    switch(fdwReason)

    {

    case DLL_PROCESS_ATTACH:

             DetourTransactionBegin();

    DetourUpdateThread(GetCurrentThread());

    DetourAttach(&(PVOID&)camerahook,(PVOID)capCreateCaptureWindowA_mine);//拦截摄像头函数

        break;

    case DLL_PROCESS_DETACH:

 

            DetourTransactionBegin();

    DetourUpdateThread(GetCurrentThread());

    DetourDetach((PVOID*)capCreateCaptureWindowA,(PVOID)capCreateCaptureWindowA_mine);//解除拦截摄像头函数

        break;

    }

    return TRUE;

}

 

void InstallHook()

{

    //DisableThreadLibraryCalls(g_hInst);

 //   DetourTransactionBegin();

 //   DetourUpdateThread(GetCurrentThread());

    //DetourAttach(&(PVOID&)camerahook,(PVOID)capCreateCaptureWindowA_mine);//拦截摄像头函数

    //DetourAttach();// 拦截键盘记录函数

    //DetourAttach();//拦截屏幕函数

    //DetourAttach();//拦截麦克风函数

    //DetourTransactionCommit();

}

 

void UninstallHook()

{

    //DetourTransactionBegin();

    //DetourUpdateThread(GetCurrentThread());

    //DetourDetach((PVOID*)capCreateCaptureWindowA,(PVOID)capCreateCaptureWindowA_mine);//解除拦截摄像头函数

    DetourDetach();//解除拦截键盘记录函数

    DetourDetach();//解除摄像头函数

    DetourDetach();//解除麦克风函数

    //DetourTransactionCommit();

}

 

原理都类似,这里就不多废话 ,大家可以去试 ,效果相当不错 

 

 

 

 

 

 

 


http://www.ppmy.cn/news/849369.html

相关文章

高仿微信语音库--LQRAudioRecord

LQRAudioRecord 本库集成录音与播音功能&#xff0c;使用简单方便&#xff0c;让IM集成语音不再是难题。 一、简述 该库可进行语音录制及播放&#xff0c;方便IM项目集成语音功能。 录音可获取分贝&#xff0c;并默认回传10秒倒计时。播放时贴耳自动转为听筒播放&#xff0…

springboot 使用多个yml文件

如果我有很多配置和/或环境,通常我会这样做: $ cat src/main/resources/application.yml: spring:profiles:include: >profile1,profile2,...profileN

基于linux下的高并发服务器开发(第一章)-GCC(1)1.2

打开XShell,在连接虚拟机Ubuntu的窗口中输入&#xff1a;sudo apt install gcc g gcc -v,查看gcc的版本,gcc version 7.5.0 也可以是gcc --version,查看信息相对少一些 g -v g --version ls查看当前目录的文件/文件夹 cd Linux/ 进入Linux文件夹 mkdir lession02 创建lession0…

C语言联合体

一、联合体的概念 联合 (union) 是一个能在同一个存储空间里 ( 但不同时) 存储不同类型数据的复合数据类型。 大致结构如下&#xff1a; n union foo /* 定义一个联合类型foo */ n { q int digit; q double bigfl[10]; q char letter; n }baz; /* 定义一个example类型的联合变量…

SQL Server JSON 数据操作

使用内置函数 (SQL Server) 验证、查询和更改 JSON 数据 使用 OPENJSON 分析和转换 JSON 数据 (SQL Server) 1、JSON 内置函数 ISJSON 测试字符串是否包含有效 JSON。 JSON_VALUE 从 JSON 字符串中提取标量值。 JSON_QUERY 从 JSON 字符串中提取对象或数组。 JSON_MODIFY 更…

[M双指针] lc80. 删除排序数组中的重复项 II(双指针+经典)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;80. 删除排序数组中的重复项 II 2. 题目解析 时间复杂度&#xff1a; O ( n ) O(n) O(n)。空间复杂度&#xff1a; O ( 1 ) O(1) O(1) 代码&#xff1a; class Solution { public:int removeDuplicates(vect…

北京瑞思凯fomblin galden

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /> Fomblin系列产品 1. Fomblin Greases( 润滑脂 I ) 产品型号: AQ055 BT055 AR555 AR855 CR861 CR2610 GRM07 GRM30 GRM60 2. Fomblin Greases( 润滑脂 II ) 产品型号: OT20 UT1…

相关资料0

[相关Blog文章] [转贴]游戏引擎演化史 2005-05-06 magus_yang 可移植、可扩展多人3D游戏引擎的设计与构架 2005-02-03 zhudelunalpha 由开发卡片游戏想到的 2006-05-14 coollen_mmx 游戏引擎 2004-08-07 gullsky 3D体素引擎与Ken Silverman 2006-04-08 wineceramic 关键技术实现…