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

以前的即时消息是通过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值