开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

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

[易语言] 多键盘的输入问题

[复制链接]
结帖率:67% (2/3)
跳转到指定楼层
楼主
发表于 昨天 17:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   湖北省黄冈市
200精币
我有7个USB小键盘,要在七个编辑框同时输入数字,有两个要求,这个应该怎么做,代码怎么写?
1、如何区分设定出哪个小键盘对应哪个编辑框,例如,1号键盘,对应1号编辑框,那么7个完全相同的键盘里怎么指定出哪一个键盘为1号?


2、只有一个输入光标,怎么让光标不在的编辑框里输入上数字,例如,光标在1号编辑框,我用2号键盘输入数字,那么数字在2号编辑框里显示?

请大神们教教我!感谢,能代写的高手可以加微私聊!


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

签到天数: 8 天

沙发
发表于 昨天 17:27 | 只看该作者   云南省西双版纳傣族自治州
[color=var(--md-box-samantha-normal-text-color) !important]要区分 7 个相同的 USB 小键盘,你需要获取每个键盘的唯一标识符。在 E 语言中,可以通过 Windows API 来实现这一点。每个 USB 设备都有一个唯一的设备路径或硬件 ID,可以用来区分它们。

[color=var(--md-box-samantha-normal-text-color) !important]以下是一个 E 语言代码示例,展示如何获取所有键盘的设备路径并让用户选择对应的编辑框:
[color=var(--md-box-samantha-normal-text-color) !important]
  
子程序名返回值类型公开备 注
获取键盘设备路径文本型 返回所有键盘的设备路径列表
变量名类 型静态数组备 注
设备信息集整数型 
设备信息字符串 
设备路径文本型用于存储键盘设备路径的数组
i整数型 
设备数量整数型 
设备路径列表文本型 
// 创建设备信息集
设备信息集 = CreateDeviceInfoList ("{884B96C3-56EF-11D1-BC8C-00A0C91405DD}", 0)
如果 (设备信息集 = INVALID_HANDLE_VALUE)
返回 ""
结束
// 获取设备数量
设备数量 = 0
i = 0
循环 ()
如果 (EnumDeviceInfo (设备信息集, i, 设备信息)) 则
设备数量 = 设备数量 + 1
i = i + 1
否则
跳出
结束
结束
// 重新初始化数组大小
重定义数组 设备路径[设备数量]
// 获取每个键盘的设备路径
i = 0
循环 ()
如果 (EnumDeviceInfo (设备信息集, i, 设备信息)) 则
设备路径[i] = SetupDiGetDeviceInstanceId (设备信息集, 设备信息)
设备路径列表 = 设备路径列表 + 设备路径[i] + #换行符
i = i + 1
否则
跳出
结束
结束
// 清理资源
SetupDiDestroyDeviceInfoList (设备信息集)
返回 设备路径列表
.子程序结束
子程序名返回值类型公开备 注
配置键盘映射逻辑型 配置键盘与编辑框的映射关系
变量名类 型静态数组备 注
键盘路径列表文本型 
选择结果整数型 
i整数型 
键盘数量整数型 
键盘路径数组文本型存储键盘设备路径的数组
映射关系文本型存储键盘与编辑框的映射关系
// 获取键盘设备路径列表
键盘路径列表 = 获取键盘设备路径 ()
如果 (键盘路径列表 = "")
信息框 ("无法获取键盘设备信息!", 0, "错误")
返回 假
结束
// 分割路径列表为数组
键盘路径数组 = 分割文本 (键盘路径列表, #换行符 )
键盘数量 = 取数组成员数 (键盘路径数组)
如果 (键盘数量 < 7)
信息框 ("检测到的键盘数量不足7个!", 0, "错误")
返回 假
结束
// 依次配置每个键盘对应的编辑框
i = 1
循环 (i <= 7)
选择结果 = 信息框 ("请按下第" + 到文本 (i) + "号键盘上的任意键...", 1, "配置键盘")
如果 (选择结果 = 1)
// 这里应该实现检测当前按下的是哪个键盘的逻辑
// 简化处理,假设用户按顺序按下键盘
映射关系[i] = 键盘路径数组[i - 1]
信息框 ("已将第" + 到文本 (i) + "号键盘映射到编辑框" + 到文本 (i), 0, "成功")
否则
返回 假
结束
i = i + 1
结束
// 保存映射关系到配置文件
保存配置文件 (映射关系)
返回 真
.子程序结束


[color=var(--md-box-samantha-normal-text-color) !important][color=var(--md-box-samantha-normal-text-color) !important]要实现无焦点输入,你需要在后台监听所有键盘输入,然后根据设备路径判断是哪个键盘被按下,并将输入发送到对应的编辑框。

[color=var(--md-box-samantha-normal-text-color) !important]以下是一个实现无焦点输入的 E 语言代码示例:


[color=var(--md-box-samantha-normal-text-color) !important]
  
子程序名返回值类型公开备 注
开始监听键盘逻辑型 开始监听所有键盘输入
变量名类 型静态数组备 注
映射关系文本型存储键盘与编辑框的映射关系
钩子句柄整数型 
// 从配置文件加载映射关系
如果 (加载配置文件 (映射关系) = )
信息框 ("无法加载键盘映射配置!", 0, "错误")
返回 假
结束
// 设置键盘钩子
钩子句柄 = SetWindowsHookEx (WH_KEYBOARD_LL, 键盘钩子回调, 取当前进程句柄 (), 0)
如果 (钩子句柄 = 0)
信息框 ("无法设置键盘钩子!", 0, "错误")
返回 假
结束
// 保存钩子句柄供后续使用
全局变量 键盘钩子句柄 = 钩子句柄
返回 真
.子程序结束
子程序名返回值类型公开备 注
键盘钩子回调整数型 键盘钩子回调函数
参数名类 型参考可空数组备 注
nCode整数型
wParam整数型
lParam整数型
变量名类 型静态数组备 注
键盘信息整数型指向KBDLLHOOKSTRUCT结构的指针
虚拟键码整数型 
扫描码整数型 
设备路径文本型 
编辑框ID整数型 
i整数型 
映射关系文本型存储键盘与编辑框的映射关系
如果 (nCode >= 0)
如果 (wParam = WM_KEYDOWN wParam = WM_SYSKEYDOWN)
// 获取键盘信息
键盘信息 = lParam
虚拟键码 = 取结构成员 (键盘信息, KBDLLHOOKSTRUCT.vkCode)
扫描码 = 取结构成员 (键盘信息, KBDLLHOOKSTRUCT.scanCode)

// 获取当前按下键盘的设备路径
// 这里需要实现根据扫描码获取设备路径的逻辑
设备路径 = 获取键盘设备路径From扫描码 (扫描码)

// 从配置文件加载映射关系
加载配置文件 (映射关系)

// 查找对应的编辑框
i = 1
编辑框ID = 0
循环 (i <= 7)
如果 (映射关系[i] = 设备路径)
编辑框ID = i
跳出
结束
i = i + 1
结束

// 如果找到对应的编辑框,将输入发送到该编辑框
如果 (编辑框ID > 0)
// 获取编辑框句柄
编辑框句柄 = 取窗口句柄 ("编辑框" + 到文本 (编辑框ID), 取窗口句柄 ())

// 发送字符到编辑框
如果 (编辑框句柄 > 0)
发送消息 (编辑框句柄, WM_CHAR, 虚拟键码, 0)
// 阻止默认处理
返回 1
结束
结束
结束
结束
// 继续默认处理
返回 CallNextHookEx (全局变量 键盘钩子句柄, nCode, wParam, lParam)
.子程序结束
子程序名返回值类型公开备 注
停止监听键盘逻辑型 停止监听键盘输入
如果 (全局变量 键盘钩子句柄 > 0)
UnhookWindowsHookEx (全局变量 键盘钩子句柄)
全局变量 键盘钩子句柄 = 0
返回 真
否则
返回 假
结束
.子程序结束




回复

使用道具 举报

结帖率:89% (39/44)

签到天数: 11 天

板凳
发表于 昨天 19:09 | 只看该作者   河北省衡水市
  
窗口程序集名保 留  保 留备 注
窗口程序集1   
变量名类 型数组备 注
键盘设备数组整数型7"  '存储7个键盘的设备 
当前活动键盘整数型7"  '记录每个键盘的最后活动 
钩子句柄整数型  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
' 初始化7个编辑框
编辑框1.内容 = ""
编辑框2.内容 = ""
编辑框3.内容 = ""
编辑框4.内容 = ""
编辑框5.内容 = ""
编辑框6.内容 = ""
编辑框7.内容 = ""

' 枚举所有键盘设备
枚举键盘设备 ()

' 安装低级键盘钩子
钩子句柄 = 安装键盘钩子 (&键盘钩子回调)
子程序名返回值类型公开备 注
枚举键盘设备  
.局部变量 设备数量, 整数型
.局部变量 设备信息, 文本型
.局部变量 i, 整数型

设备数量 = 取输入设备数量 ()
如果真 (设备数量 < 7)
信息框 ("检测到的键盘设备不足7个!", 0, , )
返回

计次循环首 (7, i)
设备信息 = 取输入设备信息 (i)
' 这里可以根据设备信息筛选真正的键盘设备
键盘设备数组[i]打开输入设备 (i)
计次循环尾 ()
子程序名返回值类型公开备 注
键盘钩子回调整数型 
DLL命令名返回值类型公开备 注
(暂未填写DLL命令名)   
DLL库文件名:
(未填写库文件名)
在DLL库中对应命令名:
(未填写命令名)
参数名类 型传址数组备 注
按键代码整数型
扫描码整数型
按键状态整数型
设备ID整数型

.局部变量 目标编辑框, 编辑框
.局部变量 键盘索引, 整数型

' 确定是哪个键盘触发的
键盘索引 = 取键盘索引 (设备ID)
如果 (键盘索引 = 0)
返回 (1)  ' 不是我们监控的键盘,交给系统处理
' 阻止默认处理
置键盘状态 (按键代码, 0)

' 根据键盘索引选择目标编辑框
目标编辑框 = 取编辑框对象 (键盘索引)

' 处理按键输入
如果 (按键状态 = 1)  ' 按键按下
判断 (按键代码 ≥ 48 按键代码 ≤ 57)  ' 数字0-9
目标编辑框.内容 = 目标编辑框.内容 + 字符 (按键代码)
判断 (按键代码 = 8)  ' 退格键
如果 (取文本长度 (目标编辑框.内容) > 0)
目标编辑框.内容 = 取文本左边 (目标编辑框.内容, 取文本长度 (目标编辑框.内容) - 1)
' 其他按键不做处理


返回 (1)
子程序名返回值类型公开备 注
取键盘索引整数型 
DLL命令名返回值类型公开备 注
(暂未填写DLL命令名)   
DLL库文件名:
(未填写库文件名)
在DLL库中对应命令名:
(未填写命令名)
参数名类 型传址数组备 注
设备ID整数型

.局部变量 i, 整数型

计次循环首 (7, i)
如果 (设备ID = 键盘设备数组[i])
返回 (i)

计次循环尾 ()

返回 (0)
子程序名返回值类型公开备 注
取编辑框对象编辑框 
DLL命令名返回值类型公开备 注
(暂未填写DLL命令名)   
DLL库文件名:
(未填写库文件名)
在DLL库中对应命令名:
(未填写命令名)
参数名类 型传址数组备 注
索引整数型

判断 (索引 = 1)
返回 (编辑框1)
判断 (索引 = 2)
返回 (编辑框2)
判断 (索引 = 3)
返回 (编辑框3)
判断 (索引 = 4)
返回 (编辑框4)
判断 (索引 = 5)
返回 (编辑框5)
判断 (索引 = 6)
返回 (编辑框6)
判断 (索引 = 7)
返回 (编辑框7)
返回 (编辑框1)

子程序名返回值类型公开备 注
__启动窗口_将被销毁  
' 卸载键盘钩子
卸载键盘钩子 (钩子句柄



回复

使用道具 举报

结帖率:100% (1/1)

签到天数: 5 天

地板
发表于 15 小时前 | 只看该作者   河北省石家庄市
创建N个线程, 监控N个键盘, 每个键盘输入到指定编辑框  ,具体实现,可以自行百du或者百du
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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