酷代码 AI
菜单
服务商

解决电脑运行打不开问题:代码优化与权限检查

根据提供的代码,要解决电脑运行打不开的问题,需从权限、文件路径、兼容性等方面排查并修改。以下是修改后的代码及解读: ```vb .版本 2 .支持库 eAPI .支持库 shell .子程序 _进程组合框_将弹出列表 .局部变量 jc, 进程信息, , "0" .局部变量 进程个数, 整数型 .局部变量 js, 整数型 进程组合框.清空 () jc = 取系统进程列表 () 进程个数 = 取数组成员数 (jc) .计次循环首 (进程个数, js) 进程组合框.加入项目 (jc [js].进程名称, ) .计次循环尾 () .子程序 提取DUMP1 .局部变量 DUMP数据, 字节集 .局部变量 原版PE头, 字节集 .局部变量 最终数据, 字节集 .局部变量 DUMP名称, 文本型 .局部变量 进程ID, 整数型 .局部变量 进程句柄, 整数型 .局部变量 原版路径, 文本型 .局部变量 PE头大小, 整数型 进程ID = 取进程ID (进程组合框.取项目文本 (进程组合框.现行选中项)) 进程句柄 = 进程_打开 (进程ID) .如果真 (进程ID = 0) 输出 (“请先选择游戏进程”) 返回 () .如果真结束 ' 检查进程句柄是否有效 .如果真 (进程句柄 = 0) 输出 (“无法打开进程,请检查权限或进程是否存在”) 返回 () .如果真结束 .如果真 (读内存整数型 (进程ID, 5368709120) ≠ 9460301) 输出 (“无读写权限,请以管理员身份运行程序或调整权限”) 进程_关闭 (进程句柄) 返回 () .如果真结束 ' ========== 关键:读取原版DNF.exe的PE头(包含资源/版本信息) ========== ' 请改成你电脑上DNF.exe的真实路径! 原版路径 = “D:\地下城与勇士\start\DNF.exe” 原版PE头 = 读入文件 (原版路径) .如果真 (原版PE头 = {}) 输出 (“错误:无法读取原版DNF.exe,请检查路径是否正确或文件是否存在”) 进程_关闭 (进程句柄) 返回 () .如果真结束 ' 读取前4096字节,包含PE头和资源表,足够让属性页正常显示 PE头大小 = 4096 原版PE头 = 取字节集左边 (原版PE头, PE头大小) ' ================================================================== 输出 (“正在读取内存,请稍候…”) 程序_延时 (100) ' 一次性读取整个内存,添加错误检查 DUMP数据 = 读内存字节集 (进程ID, 5368709120, 248512512) .如果真 (取字节集长度 (DUMP数据) = 0) 输出 (“读取内存失败,请检查权限或进程状态”) 进程_关闭 (进程句柄) 返回 () .如果真结束 输出 (“DUMP数据获取完毕,正在生成带属性页的文件”) ' 拼接原版PE头 + 内存数据(跳过内存数据的前4096字节,避免重复) 最终数据 = 原版PE头 + 取字节集右边 (DUMP数据, 取字节集长度 (DUMP数据) - PE头大小) ' 生成文件名 DUMP名称 = 到文本 (取年份 (取现行时间 ())) + “-” + 到文本 (取月份 (取现行时间 ())) + “-” + 到文本 (取日 (取现行时间 ())) + “_DUMP.exe” ' 检查是否能成功写入文件 .如果真 (写到文件 (取特定目录 (#系统桌面) + DUMP名称, 最终数据) = 假) 输出 (“文件写入失败,请检查桌面权限或磁盘空间”) 进程_关闭 (进程句柄) 返回 () .如果真结束 输出 (“✅ 文件生成完毕!桌面:” + DUMP名称) 输出 (“✅ 此文件属性页将正常显示DNF的版本信息和图标”) 进程_关闭 (进程句柄) .子程序 输出 .参数 内容, 文本型 编辑框1.加入文本 (内容 + #换行符) .子程序 程序_延时, 逻辑型, 公开, 不占用cpu,窗口不卡死,不影响其它代码执行 .参数 延时间隔, 长整数型, 可空, 1000毫秒 = 1秒 留空为无限等待 .参数 延时单位, 整数型, 可空, 默认为毫秒 0=毫秒 1=秒 2=分钟 3=小时 .局部变量 匿名局部变量_1, 整数型 .局部变量 匿名局部变量_2, 匿名结构_98 .判断开始 (延时单位 = 0 且 是否为空 (延时间隔)) 延时间隔 = 5000 × 60 × 60 延时单位 = 5000 × 60 × 60 .判断 (延时单位 = 0) 延时单位 = 1 .判断 (延时单位 = 1) 延时单位 = 1000 .判断 (延时单位 = 2) 延时单位 = 1000 × 60 .判断 (延时单位 = 3) 延时单位 = 1000 × 60 × 60 .默认 .判断结束 匿名局部变量_2.匿名成员_1 = -10 × 延时间隔 × 1000 × 延时单位 匿名局部变量_1 = CreateWaitableTimerA (0, 假, 0) SetWaitableTimer (匿名局部变量_1, 匿名局部变量_2, 0, 0, 0, 假) .判断循环首 (MsgWaitForMultipleObjects (1, 匿名局部变量_1, 假, -1, 255) ≠ 0) 处理事件 () .判断循环尾 () CloseHandle (匿名局部变量_1) 返回 (真) ``` ### 修改点说明 1. **进程句柄检查**:在打开进程后,添加对进程句柄是否有效的检查,若无效则输出错误信息。 2. **权限提示优化**:当无读写权限时,提示以管理员身份运行程序或调整权限。 3. **内存读取检查**:读取内存数据后,检查字节集长度是否为 0,若为 0 则输出读取失败信息。 4. **文件写入检查**:写入文件时,检查是否成功,若失败则输出相应错误信息。 ######[AI问答 | 1651点数解答 | 2026-05-16 21:56:20]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]