开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 436|回复: 15
收起左侧

[已解决] 很久没写代码了问个精易模块 注册表EX的问题

 关闭 [复制链接]
结帖率:50% (1/2)
发表于 2025-2-18 20:54:52 | 显示全部楼层 |阅读模式   广东省揭阳市
12精币
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
aa注册表操作Ex  
信息注册表_键  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
测试文本型 
测试2文本型0
计次整数型 
样本文本型 
测试 = “HKEY_LOCAL_MACHINE\SOFTWARE\test\top”
测试2 = 分割文本 (测试, “\”, )
计次循环首 (取数组成员数 (测试2), 计次)
判断 (计次 + 1 < 取数组成员数 (测试2))
样本 = 样本 + 测试2 [计次 + 1]“\”



计次循环尾 ()
aa.读取键值Ex ( #HKEY_LOCAL_MACHINE, 样本, 测试2 [取数组成员数 (测试2)], 信息)
调试输出 (取字节集数据 (信息.键值, #长整数型, ))


i支持库列表   支持库注释   
spec特殊功能支持库


如果这个值是“FFFFFFFF” 应该怎么还原呢?按照我这个方法只能还原到 16777215 最大数值了 求助


最佳答案

查看完整内容

整数 = 取字节集数据 (信息.键值, #整数型, ) 整数 =左移_长整数(整数 ,8)+255 输出调试文本(整数 ) 注册表操作可以换一个 取 https://bbs.125.la/forum.php?mod=viewthread&tid=14114425&highlight=%E6%B3%A8%E5%86%8C%E8%A1%A8%2B%E6%A8%A1%E5%9D%97 补充内容 (2025-2-18 23:44): 注册表_取数值注册项 的 返回值 改成长整数型,代码中的#整数型 也改成 #长整数型 ...

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

签到天数: 16 天

发表于 2025-2-18 20:54:53 | 显示全部楼层   重庆市重庆市
永不放弃 发表于 2025-2-18 22:49
很感谢你的回答,但是这个代码我不知道怎么使用,是这样的我想表达的是 读取键值Ex 这个命令最多只能度到 ...

整数 = 取字节集数据 (信息.键值, #整数型, )
整数 =左移_长整数(整数 ,8)+255
输出调试文本(整数 )

注册表操作可以换一个 取
https://bbs.125.la/forum.php?mod ... B%E6%A8%A1%E5%9D%97

补充内容 (2025-2-18 23:44):
注册表_取数值注册项  的 返回值  改成长整数型,代码中的#整数型 也改成 #长整数型
回复

使用道具 举报

结帖率:100% (2/2)

签到天数: 13 天

发表于 2025-2-18 21:00:11 | 显示全部楼层   辽宁省丹东市
长整数型数据 肯定是需要用一个长整数型变量来接收
回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 1 天

 楼主| 发表于 2025-2-18 21:09:11 | 显示全部楼层   广东省揭阳市
算法艺术家 发表于 2025-2-18 21:00
长整数型数据 肯定是需要用一个长整数型变量来接收

取出的值是字节集,怕那是 整数型 也不对啊
回复

使用道具 举报

结帖率:100% (18/18)

签到天数: 13 天

发表于 2025-2-18 21:37:30 | 显示全部楼层   广东省东莞市
[color=rgba(0, 0, 0, 0.4)]开始深度思考:好的,我现在需要解决用户的问题。用户在使用易语言操作注册表时,遇到了读取十六进制值“FFFFFFFF”还原的问题,当前方法只能得到16777215,而正确值应该是更大的数值。我需要分析用户提供的代码,找出问题所在,并给出正确的解决方法。

[color=rgba(0, 0, 0, 0.4)]首先,用户代码的目标是读取注册表中的某个键值,该键值的值为“FFFFFFFF”。用户使用的方法是分割注册表路径,然后调用注册表操作类的读取方法。但还原后的数值只有16777215,这显然不正确,因为FFFFFFFF的十进制应该是4294967295。
[color=rgba(0, 0, 0, 0.4)]接下来,我需要查看用户提供的代码。用户将注册表路径“HKEY_LOCAL_MACHINE\SOFTWARE\test\top”分割成数组,然后通过循环构建路径。分割后的测试2数组应该是["HKEY_LOCAL_MACHINE", "SOFTWARE", "test", "top"]。在循环中,用户试图构建样本路径,但可能存在逻辑错误,导致路径构建不正确。例如,计次循环从1开始,但数组索引可能处理不当,导致路径拼接错误,进而读取到错误的键值。
[color=rgba(0, 0, 0, 0.4)]然后,用户调用aa.读取键值Ex方法,传入HKEY_LOCAL_MACHINE根键、样本路径和键名。这里可能的问题是路径构建错误,导致读取的不是预期的键,或者读取到的数据类型处理有误。例如,如果注册表中的值是DWORD类型,而用户将其作为字符串处理,就会导致转换错误。
[color=rgba(0, 0, 0, 0.4)]用户提到“FFFFFFFF”还原为16777215,这明显是将其当作十六进制处理,但结果却只有24位(FFFFFF),而不是32位的FFFFFFFF。可能的原因是用户使用了到整数()函数,该函数可能将十六进制字符串视为整数时发生了溢出或截断,或者在读取注册表值时没有正确处理DWORD类型,而是将其转换为字符串,导致转换错误。
[color=rgba(0, 0, 0, 0.4)]接下来,我需要考虑正确的处理方法。在易语言中,处理注册表的DWORD值应该直接读取为整数类型,而不是字符串。如果注册表中的值确实是DWORD类型的FFFFFFFF,对应的十进制是4294967295。用户可能错误地将其作为字符串处理,导致转换错误。此外,路径构建的问题也可能导致读取到错误的键值,从而得到错误的结果。
[color=rgba(0, 0, 0, 0.4)]解决方案应包括两个部分:修正注册表路径的构建,确保正确读取目标键值;正确处理DWORD类型的值,将其转换为正确的十进制数值。例如,使用进制_十六到十()函数将十六进制字符串转换为长整数,或者直接读取注册表中的DWORD值,避免字符串转换。
[color=rgba(0, 0, 0, 0.4)]另外,用户可能混淆了不同数据类型的处理方式,例如将REG_DWORD和REG_SZ类型的数据混用,导致转换错误。需要明确注册表值的类型,并选择相应的读取和转换方法。
[color=rgba(0, 0, 0, 0.4)]最后,验证解决方案的正确性,确保路径构建正确,数据类型处理正确,转换函数能够处理32位的十六进制值,避免溢出或截断。
[color=rgba(0, 0, 0, 0.4)]深度思考结束
[color=rgba(0, 0, 0, 0.4)]根据您提供的代码和问题描述,这个问题主要涉及注册表DWORD值的读取和十六进制转换。以下是详细的解决方案:
[color=rgba(0, 0, 0, 0.4)]
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
aa注册表操作Ex  
信息注册表_键  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
测试文本型 
测试2文本型0
计次整数型 
样本文本型 
完整路径文本型 
测试 = "SOFTWARE\test\top"  ' 已修正:不需要包含根键名称
测试2 = 分割文本 (测试, "\", )
' 正确构建注册表路径(去掉根键部分)
计次循环首 (取数组成员数 (测试2) - 1, 计次)  ' 修正循环次数
样本 = 样本 + 测试2[计次] + "\"
计次循环尾 ()
' 调试输出路径是否正确
调试输出 ("构建的注册表路径:", 样本)
调试输出 ("要cha询的键名:", 测试2[取数组成员数 (测试2)])
aa.读取键值Ex ( #HKEY_LOCAL_MACHINE, 样本, 测试2[取数组成员数 (测试2)], 信息)
如果真 (信息.类型 = #REG_DWORD )
' 正确转换DWORD值
调试输出 ("原始字节集数据:", 信息.键值)
调试输出 ("转换为十进制:", 取字节集数据 (信息.键值, #长整数型, ))
调试输出 ("转换为十六进制:", 进制_十到十六 (取字节集数据 (信息.键值, #长整数型, )))
信息框 ("该键值不是DWORD类型", 0, "错误", )


i支持库列表   支持库注释   
spec特殊功能支持库
[color=rgba(0, 0, 0, 0.9)]问题分析及解决方案:
  • 路径构建问题修正:
    • 原代码将完整路径包含根键名称"HKEY_LOCAL_MACHINE",但注册表操作方法的第一个参数已经指定根键
    • 修正后路径应为:"SOFTWARE\test\top" → 分割后构建父路径为"SOFTWARE\test"
  • [color=rgba(0, 0, 0, 0.9)]DWORD值转换说明:

    • 当注册表键值类型为REG_DWORD时,数据存储为4字节小端格式
    • [color=rgba(0, 0, 0, 0.9)]正确转换方法:

  
子程序名返回值类型公开备 注
转换DWORD值  
参数名类 型参考可空数组备 注
字节数据字节集
变量名类 型静态数组备 注
结果长整数型 
结果 = 取字节集数据 (字节数据, #长整数型, )
调试输出 ("十进制:", 结果)
调试输出 ("十六进制:", 进制_十到十六 (结果))



  • FFFFFFFF的正确转换:
    • 十六进制FFFFFFFF对应:
      • 无符号DWORD:4294967295
      • 有符号LONG:-1
    • 使用长整数型变量存储结果避免溢出
  • 增强错误处理:


.子程序 安全读取注册表值.参数 根键, 整数型.参数 路径, 文本型.参数 键名, 文本型.局部变量 状态, 整数型.局部变量 值信息, 注册表_键状态 = aa.读取键值Ex(根键, 路径, 键名, 值信息).判断开始 (状态 = 0)    .判断开始 (值信息.类型 = #REG_DWORD)        调试输出("DWORD值:", 取字节集数据(值信息.键值, #长整数型, ))    .判断 (值信息.类型 = #REG_SZ)        调试输出("字符串值:", 到文本(值信息.键值))    .判断 (值信息.类型 = #REG_BINARY)        调试输出("二进制值:", 值信息.键值)    .默认        调试输出("未处理类型:", 值信息.类型)    .判断结束.默认    调试输出("读取失败,错误码:", aa.方法_取最后错误代码Ex()).判断结束

[color=rgba(0, 0, 0, 0.9)]


回复

使用道具 举报

结帖率:100% (2/2)

签到天数: 13 天

发表于 2025-2-18 21:45:05 | 显示全部楼层   辽宁省丹东市
永不放弃 发表于 2025-2-18 21:09
取出的值是字节集,怕那是 整数型 也不对啊

长整数变量 = 取字节集数据 (信息.键值, #长整数型, ) 这样呢
回复

使用道具 举报

签到天数: 16 天

发表于 2025-2-18 21:53:03 | 显示全部楼层   重庆市重庆市

你应该  调试输出 (信息.键值),看它存的是什么

根据存的数据,再取字节集数据()

长整数是8字节,FFFFFFFF是整数4字节
回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 1 天

 楼主| 发表于 2025-2-18 22:14:54 | 显示全部楼层   广东省揭阳市
xianggu 发表于 2025-2-18 21:37
开始深度思考:好的,我现在需要解决用户的问题。用户在使用易语言操作注册表时,遇到了读取十六进制值“FF ...

很感谢您的回答,但是不行会少两个F并且互黑提示不是DWORD   注册表"top"=dword:ffffffff 就是DWORD FFFFFFFF
回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 1 天

 楼主| 发表于 2025-2-18 22:15:14 | 显示全部楼层   广东省揭阳市
aiky123 发表于 2025-2-18 21:53
你应该  调试输出 (信息.键值),看它存的是什么

根据存的数据,再取字节集数据()

{255,255,255}
回复

使用道具 举报

签到天数: 16 天

发表于 2025-2-18 22:25:26 | 显示全部楼层   重庆市重庆市

这不就是了
255 255 255  就是 ff ff ff = 16777215 ,哪来的 ff ff  ff ff

转换到 ff ff  ff ff
整数 = 取字节集数据 (信息.键值, #整数型, )
整数 =左移(整数 ,8)+255

补充内容 (2025-2-18 22:32):
它原值就是 {255,255,255} ,写入{255,255,255,255},确定不会问题吗?
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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