开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 336|回复: 6
打印 上一主题 下一主题
收起左侧

[易语言] 易语言中控

[复制链接]
结帖率:50% (1/2)
跳转到指定楼层
楼主
发表于 2025-6-7 16:03:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   河北省邯郸市
48精币
求大佬施舍一份易语言和按键精灵通信的中控例子~求例子 求例子 求例子


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:50% (1/2)

签到天数: 8 天

沙发
 楼主| 发表于 2025-6-7 17:32:30 | 只看该作者   河北省邯郸市
救命啊  快来救救我吧
回复

使用道具 举报

结帖率:90% (46/51)

签到天数: 3 天

板凳
发表于 2025-6-7 17:50:30 | 只看该作者   广东省佛山市
估计得加中间件
回复

使用道具 举报

签到天数: 5 天

地板
发表于 2025-6-7 21:27:43 | 只看该作者   海南省白沙黎族自治县
不行就定制吧
回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 8 天

地下
 楼主| 发表于 2025-6-8 17:49:51 | 只看该作者   河北省邯郸市

您上次给我发的那个例子   #程序标识码   #POST这两个常量是什么~~~~
回复

使用道具 举报

签到天数: 5 天

6
发表于 2025-6-8 22:11:54 | 只看该作者   海南省白沙黎族自治县
神精致 发表于 2025-6-8 17:49
您上次给我发的那个例子   #程序标识码   #POST这两个常量是什么~~~~

#程序标识码   是一个自定义的常量,是我的程序名称,  #POST是CCHTTP模块的一个常量,加载了CCHTTP后就有了
回复

使用道具 举报

结帖率:57% (12/21)

签到天数: 3 天

7
发表于 2025-6-11 11:34:54 | 只看该作者   浙江省湖州市
### 易语言与按键精灵通信中控系统实现

为了实现易语言与按键精灵的通信,我们需要一个中控系统来协调两者之间的数据交换。下面提供一个完整的解决方案,包含中控系统、易语言客户端和按键精灵脚本。


#### 中控系统实现

中控系统使用易语言编写,负责监听按键精灵的请求并转发给易语言客户端:

```易语言
.版本 2
.支持库 spec
.支持库 spec_net

.子程序 _启动子程序, 整数型
.局部变量 按键精灵监听套接字, 整数型
.局部变量 易语言客户端监听套接字, 整数型
.局部变量 按键精灵客户端, 整数型
.局部变量 易语言客户端, 整数型
.局部变量 数据, 字节集
.局部变量 收到数据长度, 整数型
.局部变量 客户端IP, 文本型
.局部变量 客户端端口, 整数型
.局部变量 线程ID, 整数型

// 创建按键精灵监听套接字(UDP)
按键精灵监听套接字 = UDP创建套接字 ()
.如果真 (按键精灵监听套接字 = 0)
    信息框 ("创建按键精灵监听套接字失败", 0, "错误")
    返回 (0)
.如果真结束

// 绑定按键精灵监听端口
.如果真 (UDP绑定套接字 (按键精灵监听套接字, 8888) = 假)
    信息框 ("绑定按键精灵监听端口失败", 0, "错误")
    UDP关闭套接字 (按键精灵监听套接字)
    返回 (0)
.如果真结束

// 创建易语言客户端监听套接字(TCP)
易语言客户端监听套接字 = TCP创建套接字 ()
.如果真 (易语言客户端监听套接字 = 0)
    信息框 ("创建易语言客户端监听套接字失败", 0, "错误")
    UDP关闭套接字 (按键精灵监听套接字)
    返回 (0)
.如果真结束

// 绑定易语言客户端监听端口
.如果真 (TCP绑定套接字 (易语言客户端监听套接字, 9999) = 假)
    信息框 ("绑定易语言客户端监听端口失败", 0, "错误")
    UDP关闭套接字 (按键精灵监听套接字)
    TCP关闭套接字 (易语言客户端监听套接字)
    返回 (0)
.如果真结束

// 开始监听易语言客户端连接
.如果真 (TCP监听套接字 (易语言客户端监听套接字, 10) = 假)
    信息框 ("开始监听易语言客户端连接失败", 0, "错误")
    UDP关闭套接字 (按键精灵监听套接字)
    TCP关闭套接字 (易语言客户端监听套接字)
    返回 (0)
.如果真结束

// 启动按键精灵消息处理线程
线程ID = 启动线程 (, 按键精灵消息处理线程, 整数型 (按键精灵监听套接字))
.如果真 (线程ID = 0)
    信息框 ("启动按键精灵消息处理线程失败", 0, "错误")
    UDP关闭套接字 (按键精灵监听套接字)
    TCP关闭套接字 (易语言客户端监听套接字)
    返回 (0)
.如果真结束

// 启动易语言客户端连接处理线程
线程ID = 启动线程 (, 易语言客户端连接处理线程, 整数型 (易语言客户端监听套接字))
.如果真 (线程ID = 0)
    信息框 ("启动易语言客户端连接处理线程失败", 0, "错误")
    UDP关闭套接字 (按键精灵监听套接字)
    TCP关闭套接字 (易语言客户端监听套接字)
    返回 (0)
.如果真结束

信息框 ("中控系统已启动,按键精灵监听端口:8888,易语言客户端监听端口:9999", 0, "提示")
.子程序尾

.子程序 按键精灵消息处理线程, 整数型, 整数型
.参数 监听套接字, 整数型
.局部变量 数据, 字节集
.局部变量 发送方IP, 文本型
.局部变量 发送方端口, 整数型
.局部变量 收到数据长度, 整数型
.局部变量 消息内容, 文本型

// 持续接收按键精灵的消息
.循环判断首 ()
    // 接收数据
    收到数据长度 = UDP接收数据 (监听套接字, 数据, 发送方IP, 发送方端口)
    .如果真 (收到数据长度 <= 0)
        // 接收错误或连接关闭
        延时 (100)  // 防止CPU占用过高
        继续循环
    .如果真结束
   
    // 转换为文本
    消息内容 = 到文本 (数据)
   
    // 记录日志
    调试输出 ("收到按键精灵消息:", 消息内容, "来自:", 发送方IP, ":", 发送方端口)
   
    // 转发消息给易语言客户端
    TCP发送数据 (易语言客户端, 数据)
.循环判断尾 ()
.子程序尾

.子程序 易语言客户端连接处理线程, 整数型, 整数型
.参数 监听套接字, 整数型
.局部变量 客户端, 整数型
.局部变量 数据, 字节集
.局部变量 收到数据长度, 整数型
.局部变量 客户端IP, 文本型
.局部变量 客户端端口, 整数型

// 持续接受易语言客户端连接
.循环判断首 ()
    // 接受新连接
    客户端 = TCP接受连接 (监听套接字, 客户端IP, 客户端端口)
    .如果真 (客户端 = 0)
        延时 (100)  // 防止CPU占用过高
        继续循环
    .如果真结束
   
    // 记录日志
    调试输出 ("易语言客户端连接:", 客户端IP, ":", 客户端端口)
   
    // 保存客户端连接
    易语言客户端 = 客户端
   
    // 启动客户端消息处理线程
    启动线程 (, 易语言客户端消息处理线程, 整数型 (客户端))
.循环判断尾 ()
.子程序尾

.子程序 易语言客户端消息处理线程, 整数型, 整数型
.参数 客户端, 整数型
.局部变量 数据, 字节集
.局部变量 收到数据长度, 整数型
.局部变量 消息内容, 文本型

// 持续接收易语言客户端的消息
.循环判断首 ()
    // 接收数据
    收到数据长度 = TCP接收数据 (客户端, 数据)
    .如果真 (收到数据长度 <= 0)
        // 接收错误或连接关闭
        调试输出 ("易语言客户端断开连接")
        跳出循环
    .如果真结束
   
    // 转换为文本
    消息内容 = 到文本 (数据)
   
    // 记录日志
    调试输出 ("收到易语言客户端消息:", 消息内容)
   
    // 转发消息给按键精灵(这里简化处理,实际应用中需要记录按键精灵的IP和端口)
    UDP发送数据 (按键精灵监听套接字, 数据, "127.0.0.1", 8889)  // 假设按键精灵的回复端口是8889
.循环判断尾 ()
.子程序尾
```


#### 易语言客户端代码

易语言客户端连接中控系统,发送和接收消息:

```易语言
.版本 2
.支持库 spec
.支持库 spec_net

.子程序 _按钮1_被单击
.局部变量 中控连接, 整数型
.局部变量 数据, 字节集
.局部变量 发送结果, 逻辑型
.局部变量 接收数据, 字节集
.局部变量 接收长度, 整数型
.局部变量 线程ID, 整数型

// 连接中控系统
中控连接 = TCP创建套接字 ()
.如果真 (中控连接 = 0)
    信息框 ("创建套接字失败", 0, "错误")
    返回 ()
.如果真结束

.如果真 (TCP连接 (中控连接, "127.0.0.1", 9999) = 假)
    信息框 ("连接中控系统失败", 0, "错误")
    TCP关闭套接字 (中控连接)
    返回 ()
.如果真结束

// 保存连接
全局_中控连接 = 中控连接

// 启动接收消息线程
线程ID = 启动线程 (, 接收消息线程, 整数型 (中控连接))
.如果真 (线程ID = 0)
    信息框 ("启动接收消息线程失败", 0, "错误")
    TCP关闭套接字 (中控连接)
    返回 ()
.如果真结束

// 发送测试消息
数据 = 到字节集 ("这是来自易语言的测试消息")
发送结果 = TCP发送数据 (中控连接, 数据)
.如果真 (发送结果 = 假)
    信息框 ("发送消息失败", 0, "错误")
.如果真结束
.子程序尾

.子程序 接收消息线程, 整数型, 整数型
.参数 连接, 整数型
.局部变量 接收数据, 字节集
.局部变量 接收长度, 整数型
.局部变量 消息内容, 文本型

// 持续接收消息
.循环判断首 ()
    // 接收数据
    接收长度 = TCP接收数据 (连接, 接收数据)
    .如果真 (接收长度 <= 0)
        // 接收错误或连接关闭
        调试输出 ("与中控系统的连接已断开")
        跳出循环
    .如果真结束
   
    // 转换为文本
    消息内容 = 到文本 (接收数据)
   
    // 显示消息
    输出调试文本 ("收到来自按键精灵的消息: " + 消息内容)
   
    // 在界面上显示(假设有一个编辑框)
    编辑框1.加入文本 (消息内容 + #换行符)
.循环判断尾 ()
.子程序尾

.子程序 _按钮2_被单击
.局部变量 数据, 字节集
.局部变量 发送结果, 逻辑型

// 检查连接是否存在
.如果真 (全局_中控连接 = 0)
    信息框 ("未连接到中控系统", 0, "提示")
    返回 ()
.如果真结束

// 获取编辑框内容并发送
数据 = 到字节集 (编辑框2.内容)
发送结果 = TCP发送数据 (全局_中控连接, 数据)
.如果真 (发送结果 = 假)
    信息框 ("发送消息失败", 0, "错误")
.如果真结束
.子程序尾

.子程序 _按钮3_被单击
.如果真 (全局_中控连接 ≠ 0)
    TCP关闭套接字 (全局_中控连接)
    全局_中控连接 = 0
    信息框 ("已断开与中控系统的连接", 0, "提示")
.如果真结束
.子程序尾

.子程序 _窗口1_将被销毁
.如果真 (全局_中控连接 ≠ 0)
    TCP关闭套接字 (全局_中控连接)
.如果真结束
.子程序尾
```


#### 按键精灵脚本

按键精灵脚本发送和接收消息:

```vbs
// 按键精灵与易语言通信脚本

// 常量定义
Const CONTROL_CENTER_IP = "127.0.0.1"  // 中控系统IP
Const CONTROL_CENTER_PORT = 8888  // 中控系统端口
Const REPLY_PORT = 8889  // 按键精灵回复端口

// 初始化网络组件
Dim net, socket, replySocket

// 创建网络对象
Set net = CreateObject("NetSocket.UDP")

// 绑定回复端口
net.Bind REPLY_PORT

// 启动接收消息线程
Sub StartReceiveThread()
    Dim threadId
    threadId = StartThread("ReceiveMessages")
End Sub

// 接收消息线程函数
Sub ReceiveMessages()
    Dim data, senderIP, senderPort
   
    While True
        // 接收数据
        data = net.Receive(senderIP, senderPort)
        
        // 检查是否接收到数据
        If Len(data) > 0 Then
            // 记录日志
            TracePrint "收到来自易语言的消息: " & data
            
            // 这里可以根据接收到的消息执行相应的操作
            // 例如:If data = "CLICK_BUTTON" Then MoveTo 100, 100: LeftClick 1
            
            // 发送回复消息
            SendMessage "消息已收到: " & data
        End If
        
        // 短暂延时,避免CPU占用过高
        Delay 100
    Wend
End Sub

// 发送消息函数
Sub SendMessage(message)
    net.Send CONTROL_CENTER_IP, CONTROL_CENTER_PORT, message
    TracePrint "已发送消息到中控系统: " & message
End Sub

// 主函数
Sub Main()
    TracePrint "按键精灵通信模块已启动"
   
    // 启动接收线程
    StartReceiveThread()
   
    // 发送测试消息
    SendMessage "这是来自按键精灵的测试消息"
   
    // 主循环
    While True
        // 这里可以添加按键精灵的主要功能代码
        // 例如:检测特定按键、执行自动化操作等
        
        // 短暂延时
        Delay 1000
    Wend
End Sub

// 启动主函数
Main()
```


### 通信协议设计

为了使通信更加规范和可靠,可以设计一个简单的协议:

```易语言
.版本 2
.支持库 spec

// 消息类型常量
.常量 消息类型_文本 = 1
.常量 消息类型_命令 = 2
.常量 消息类型_数据 = 3

// 封装消息函数
.子程序 封装消息, 字节集, 整数型, 文本型
.参数 类型, 整数型
.参数 内容, 文本型
.局部变量 头部, 字节集
.局部变量 内容数据, 字节集
.局部变量 长度, 整数型
.局部变量 结果, 字节集

// 构造消息头部 (4字节类型 + 4字节长度)
头部 = 到字节集 (类型, 4)
长度 = 取文本长度 (内容)
头部 = 头部 + 到字节集 (长度, 4)

// 转换内容为字节集
内容数据 = 到字节集 (内容)

// 组合完整消息
结果 = 头部 + 内容数据

返回 (结果)
.子程序尾

// 解析消息函数
.子程序 解析消息, 整数型, 字节集, 整数型, 文本型, 整数型
.参数 消息, 字节集
.参数 类型, 整数型, 传址
.参数 内容, 文本型, 传址
.参数 结果, 整数型, 传址
.局部变量 消息长度, 整数型
.局部变量 内容长度, 整数型

// 检查消息长度
消息长度 = 取字节集长度 (消息)
.如果真 (消息长度 < 8)
    结果 = 0  // 消息不完整
    返回 (0)
.如果真结束

// 解析类型和长度
类型 = 到整数 (取字节集左边 (消息, 4))
内容长度 = 到整数 (取字节集左边 (取字节集右边 (消息, 消息长度 - 4), 4))

// 检查内容是否完整
.如果真 (消息长度 < 8 + 内容长度)
    结果 = 0  // 消息不完整
    返回 (0)
.如果真结束

// 提取内容
内容 = 到文本 (取字节集右边 (消息, 8 + 内容长度 - 8))

结果 = 1  // 解析成功
返回 (8 + 内容长度)  // 返回已处理的字节数
.子程序尾
```


### 使用说明

1. 先启动中控系统
2. 再启动易语言客户端,连接到中控系统
3. 最后运行按键精灵脚本

这样,易语言客户端和按键精灵就可以通过中控系统进行双向通信了。中控系统使用UDP协议接收按键精灵的消息,使用TCP协议与易语言客户端通信,确保了通信的可靠性。

你可以根据实际需求修改消息格式和处理逻辑,例如添加加密、压缩或更复杂的命令解析功能。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表