易语言通过WM_COPYDATA窗口消息自动获取微信接口(WeChatHelper.dll)聊天消息

2023-05-16

以前的即时消息是通过HTTP GET请求获取消息,今天来讲一下通过易语言WM_COPYDATA窗口消息获取即时消息。(正试版接口,没有更新的来找我)

首先打开Config.ini配置文件,修改两个配置:

WindowTitle属性为你DEMO的主窗口标题,接口将通过这个标题查找窗口句柄来发消息。

SendMessageMode=1为WM_COPYDATA消息模式,当为0时是HTTP GEP请求模式。

由于接口是vc++开发的,消息的内容为结构体,下面来看一下即时消息的结构体:

 

有了这个结构体,我们在易语言中就可以转换数据。

在易语言中,先定义消息常量

.版本 2

.常量 GWL_WNDPROC, "-4"
.常量 WM_COPYDATA, "74", , 0x4A

 

再获取窗口句柄

ApphWnd = 窗口_聊天窗口.取窗口句柄 ()

绑定窗口消息回调

.版本 2
OldProc = _GetWindowLong (ApphWnd, #GWL_WNDPROC)
_SetWindowLong (ApphWnd, #GWL_WNDPROC, 到整数 (&窗口消息回调))
 

再大消息中解析数据结构:

.版本 2

.子程序 窗口消息回调, 整数型, , TKMONITOR
.参数 hWnd, 整数型
.参数 uMsg, 整数型
.参数 wParam, 整数型
.参数 lParam, 整数型
.局部变量 dwRet, 整数型
.局部变量 lpCopy, COPYDATASTRUCT
.局部变量 sByte, 字节集
.局部变量 Str, 文本型
.局部变量 聊天消息, 字节集
.局部变量 聊天内容, 文本型
.判断开始 (uMsg = #WM_COPYDATA)
    sByte = 指针到字节集 (lParam, 1024)
    ' 操作指令ID
    lpCopy.dwData = 取字节集数据 (sByte, #整数型, 1)
    ' COPYDATA消息数据长度
    lpCopy.cbData = 取字节集数据 (sByte, #整数型, 5)
    ' COPYDATA消息数据结构指针
    lpCopy.lpData = 取字节集数据 (sByte, #整数型, 9)
    ' 判断是否为消息指令
    .判断开始 (lpCopy.dwData = 7)
        ' 获取聊天消息二进制数据
        聊天消息 = 指针到字节集 (lpCopy.lpData, lpCopy.cbData)
        ' 获取各个数据结构值
          聊天内容 = 取字节集数据 (聊天消息, #文本型, 1)
        ' 输出聊天内容
        聊天内容 = 编码_utf8到gb2312 (聊天内容)
        编辑框_聊天内容.加入文本 (聊天内容 + #换行符 + #换行符)

    .默认

    .判断结束

    dwRet = 0
.默认

    dwRet = _CallWindowProc (OldProc, hWnd, uMsg, wParam, lParam)
.判断结束

返回 (dwRet)

 

下面是源码

 

.版本 2

.程序集 窗口_聊天窗口
.程序集变量 ApphWnd, 整数型
.程序集变量 OldProc, 整数型

.子程序 _窗口_聊天窗口_创建完毕

ApphWnd = 窗口_聊天窗口.取窗口句柄 ()
OldProc = _GetWindowLong (ApphWnd, #GWL_WNDPROC)
_SetWindowLong (ApphWnd, #GWL_WNDPROC, 到整数 (&窗口消息回调))


.子程序 _窗口_聊天窗口_将被销毁


_SetWindowLong (ApphWnd, #GWL_WNDPROC, OldProc)


.子程序 窗口消息回调, 整数型, , TKMONITOR
.参数 hWnd, 整数型
.参数 uMsg, 整数型
.参数 wParam, 整数型
.参数 lParam, 整数型
.局部变量 dwRet, 整数型
.局部变量 lpCopy, COPYDATASTRUCT
.局部变量 sByte, 字节集
.局部变量 Str, 文本型
.局部变量 聊天消息, 字节集
.局部变量 聊天内容, 文本型



.判断开始 (uMsg = #WM_COPYDATA)
    sByte = 指针到字节集 (lParam, 1024)
    ' 操作指令ID
    lpCopy.dwData = 取字节集数据 (sByte, #整数型, 1)
    ' COPYDATA消息数据长度
    lpCopy.cbData = 取字节集数据 (sByte, #整数型, 5)
    ' COPYDATA消息数据结构指针
    lpCopy.lpData = 取字节集数据 (sByte, #整数型, 9)
    ' 判断是否为消息指令
    .判断开始 (lpCopy.dwData = 7)
        ' 获取聊天消息二进制数据
        聊天消息 = 指针到字节集 (lpCopy.lpData, lpCopy.cbData)


        聊天内容 = 取字节集数据 (聊天消息, #文本型, 1)
        ' 输出聊天内容
        聊天内容 = 编码_utf8到gb2312 (聊天内容)
        编辑框_聊天内容.加入文本 (聊天内容 + #换行符 + #换行符)

    .默认

    .判断结束

    dwRet = 0
.默认


    dwRet = _CallWindowProc (OldProc, hWnd, uMsg, wParam, lParam)
.判断结束

返回 (dwRet)

.子程序 _窗口_聊天窗口_尺寸被改变


编辑框_聊天内容.移动 (编辑框_聊天内容.左边, 编辑框_聊天内容.顶边, 窗口_聊天窗口.宽度 - 编辑框_聊天内容.左边 - 8, 窗口_聊天窗口.高度 - 编辑框_聊天内容.顶边 - 33)


调试结果:

源码放群里面了 交流扣扣群 1005923608 150311852

下载 https://tshelper.lanzous.com/iG98Slswcjc

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

易语言通过WM_COPYDATA窗口消息自动获取微信接口(WeChatHelper.dll)聊天消息 的相关文章

  • echarts 饼图中间自定义显示内容

    做驾驶舱时 xff0c 使用到空心饼图中间显示自定义内容 xff0c 两种方式实现 1 title 进行定位 效果差点 2 graphic 查询 api后 xff0c 最为符合的使用 graphic 代码如下 xff0c 完美实现上图效果
  • 云服务器(一)基本操作

    xshell远程连接云服务器 乌班图 修改密码注意乌班图默认是禁止ssh远程登录的 xff0c 需要进行设置参考此处 VNC图形界面 添加防火墙规则 xff1a VNC使用的是TCP协议 默认端口5901远程ssh连接安装一些必备的包 xf
  • 小松的STM32教程(6)——ADC

    预备 学习目标 学会调用Get Adc Average函数会使能多个ADC通道 概述 ADC输入电压范围 xff1a 2 4V 3 6V xff0c 一般使用0V和3 3V 数据对齐 xff1a 16bit存放12bit的转换数据 xff0
  • 小松的STM32教程(14)——内部flash模拟eeprom

    为什么要用Flash来模拟EEPORM Flash更适合作为程序存储器 xff0c EEPROM更适合作为数据存储器 xff0c 存储大量数据的时候就需要使用EEPROM xff0c 廉价的MCU往往只有FLASH而没有EEPROM xff
  • Qt小项目(三):定时器和日历

    UI QTime和Qtimer类 类区别QTimer定时器类 xff0c 当时间溢出 xff08 记时超过定时区间 xff09 的时候 xff0c 就会发出timeout信号 xff0c 触发槽函数QTime时间类 xff0c 提供时分秒
  • stm32延时函数解读

    时钟树 寄存器 SysTick gt LOAD xff1a 计时器装载值 SysTick gt VAL 当前值 SysTick gt CTRL 控制寄存器 延时初始化函数 计算AHB时钟 span class token keyword v
  • 基于 ART-PI FMC驱动SDRAM

    引脚接线图 SDRAMGPIO解释FMC A0 5PF0 5地址线FMC A6 9PF12 15地址线FMC A10 12PG0 2地址线FMC D0 1PD14 15数据线FMC D2 3PD0 1数据线FMC D4 12PE7 15数据
  • 基于ART-PI SPI驱动W25Q128

    吐槽和避坑 弄spi弄了一天 xff0c 使用的开发板是art pi家的h750 xff0c 本来准备直接用rt thread studio生成的 xff0c 但是不知道怎么回事配置出的工程文件都有问题 xff0c 不是线程运行不了就是缺少
  • TT数鸭子-暴力(csp-t1模拟)

    题目 输入输出样例 xff1a 题解 xff1a 我们整个题就是使用暴力的方法进行运算 将每一只鸭子看作是十进制的数 xff0c 不断对每一位读取 xff08 采用对十整除和取余数的方法 xff09 我们对每一个鸭子都进行判断 如果满足这个
  • C++ 输入10个数字,找出最大值、最小值及其角标 的程序

    using namespace std int main int a 10 int max min int max n min n int i for i 61 0 i lt 10 i 43 43 cin gt gt a i max 61
  • CheckedListBox 当中项的状态改变

    首先 xff0c 说下我需要实现的功能 xff0c 就是把获得数据Id显示在CheckedListBox上 xff08 单击空白处不响应 xff09 xff0c 如果在CheckedListBox上勾选的项就加入到list集合中 xff0c
  • Windows 下使用 WSL 安装 Kali Linux 子系统

    Windows 下使用 WSL 安装 Kali Linux 子系统 前言操作流程开启 适用于 Linux 的 Windows 子系统 功能通过 Microsoft Store 安装修改安装路径设置用户名和密码安装工具 WSL1 和 WSL2
  • ArchLinux踩过的那些坑

    1 usb模塊有問題 usb3 0的U盤 43 usb2 0的電腦 裝不上 usb2 0的U盤 43 usb3 0的電腦 裝得上 2 沒有聲音 创建 etc asound conf或 HOME asoundrc xff0c 在里面添加 xf
  • Anaconda中,onnx和pil冲突,无法安装pil解决办法

    onnx和pil冲突 xff0c 无法安装pil解决办法 conda span class token function install span pil 失败 提示onnx和pil有conflict 执行如下命令即可 conda span
  • 笔记本电脑连接wifi显示无网络无法上网

    笔记本电脑连接wifi显示无网络无法上网 一 发现问题二 解决问题三 问题解决 一 发现问题 手机可以用wifi上网 xff0c 但笔记本电脑连接相同wifi却显示无internet不能上网 二 解决问题 1 打开设置点击 网络和inter
  • SystemVerilog基础笔记

    一 Training 1 数据类型 a 两态变量 xff1a bit byte 8bit shortint 16bit int 32bit longint 64bit shortreal相当于c的float 占32bit的内存空间 real
  • opencascade + QT5 开发环境设置(Windows系统下)

    先下载opencascade7 6 0 QT5 12 12 VS2017 或2019 xff0c 两者都行 的安装包 都需要在相应官网注册 xff0c 然后进行安装 根据安装提示 xff0c 依次点击下一步即可 安装完opencascade
  • C语言:通讯录的简单实现

    目录 前言 一 题目要求和设计思路 xff1a 1 主函数内 xff1a 1 gt 基础框架 xff1a 2 gt 需要定义的变量 2 头文件列表 1 gt 结构体contacts和结构体maillist 2 gt 定义常量 3 功能函数
  • YApi启动命令

    1 进入Yapi安装目录 yapi my yapi vendors 2 启动命令 pm2 start server app js watch
  • 算法设计题3.18-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版

    习题集完整源码部分 第3章 栈和队列 数据结构习题集 严蔚敏 吴伟民版 源码使用说明 链接 数据结构 xff08 严蔚敏 吴伟民版 xff09 课本源码 43 习题集解析使用说明 课本源码合辑 链接 数据结构 课本源码合辑 习题集全解析 链

随机推荐