开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 209|回复: 12
收起左侧

[易语言] 程序长时间运行会莫名终止,找不到原因,请指导

[复制链接]
结帖率:99% (95/96)
发表于 2025-3-14 10:56:57 | 显示全部楼层 |阅读模式   江苏省徐州市
15精币
我弄了个自动锁屏的程序,总是长时间运行会终止(不知道什么时候,什么原因),就是可能一天或者两天,发现不自动锁屏了,代码也很简单,就是不知道为什么,我调试运行,整整4天没事,编译后运行,时间长出问题了,
有没有办法解决这个问题,或者找到导致终止的原因???

  
窗口程序集名保 留  保 留备 注
窗口程序集1   
变量名类 型数组备 注
时1整数型  
分1整数型  
秒1整数型  
暂停时间日期时间型  
监测时间戳日期时间型  
暂停30逻辑型  
暂停120逻辑型  
监测鼠标坐标精易_坐标  
空闲计数整数型  
键盘钩子类_钩子  
临界许可类_临界许可  

子程序名返回值类型公开备 注
_时钟_周期事件  
变量名类 型静态数组备 注
时间阈值整数型 
inttime整数型 
上次锁定时间日期时间型 
间隔时间双精度小数型 
空闲时间整数型 
鼠标坐标精易_坐标 
判断 (暂停120 = )
暂停半小时.标题 = “暂停半小时”
inttime = 120 - 取时间间隔 (取现行时间 (), 暂停时间, #分钟 )
如果 (inttime > 0)
暂停2小时.标题 = 取文本 (“暂停2小时(-%s)”, 时间_秒到时分秒格式 (inttime × 60, “h:m”, ))
返回 ()
暂停120 = 假
暂停2小时.标题 = “暂停2小时”
暂停半小时.标题 = “暂停半小时”

判断 (暂停30 = )
暂停2小时.标题 = “暂停2小时”
inttime = 30 - 取时间间隔 (取现行时间 (), 暂停时间, #分钟 )
如果 (inttime > 0)
暂停半小时.标题 = 取文本 (“暂停半小时(-%s)”, 时间_秒到时分秒格式 (inttime × 60, “h:m”, ))
返回 ()
暂停30 = 假
暂停2小时.标题 = “暂停2小时”
暂停半小时.标题 = “暂停半小时”

暂停2小时.标题 = “暂停2小时”
暂停半小时.标题 = “暂停半小时”

空闲计数 = 空闲计数 + 时钟.时钟周期 ÷ 1000
时间阈值 = 时1 × 60 × 60 + 分1 × 60 + 秒1
' longnum = 系统_取空闲时间2 ()
如果真 (监测时间戳 = [2024年11月1日1时1分1秒])
监测鼠标坐标 = 鼠标_取位置 ()
监测时间戳 = 取现行时间 ()

鼠标坐标 = 鼠标_取位置 ()
如果 (鼠标坐标.横 ≠ 监测鼠标坐标.横 鼠标坐标.纵 ≠ 监测鼠标坐标.纵)
临界许可.进入 ()
监测鼠标坐标 = 鼠标_取位置 ()
监测时间戳 = 取现行时间 ()
空闲计数 = 0
临界许可.退出 ()
' '鼠标meiy没有移动位置
空闲时间 = 取时间间隔 (取现行时间 (), 监测时间戳, #秒 )
标签5.标题 = 到文本 (空闲时间)“-”到文本 (空闲计数)“/”到文本 (时间阈值)
如果真 (空闲时间 > 时间阈值 空闲计数 > 时间阈值)
如果真 (选择框VX.选中)
' 键盘_组合消息EX (窗口_取句柄 (, , “WeChatMainWndForPC”, “VX”), #L键, #Ctrl键)
锁定VX ()
LockWorkStation ()
空闲计数 = 0
标签时间.标题 = 到文本 (取现行时间 ())
调试输出 (“锁定”, 取现行时间 ())


子程序名返回值类型公开备 注
_确认_被单击  
置时间 ()
注册表_简单写 (“自动息屏时”, 时.内容)
注册表_简单写 (“自动息屏分”, 分.内容)
注册表_简单写 (“自动息屏秒”, 秒.内容)
注册表_简单写 (“是否锁定VX”, 选择 (选择框VX.选中, “1”, “0”))
信息框 (“保存成功!”, 0, , )
__启动窗口_可否被关闭 ()
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
程序_禁止重复运行 (“自动息屏”, 假, , , )
置托盘图标 ( #托盘图标, )
时.内容 = 选择 (注册表_简单读 (“自动息屏时”)“”, “00”, 注册表_简单读 (“自动息屏时”))
分.内容 = 选择 (注册表_简单读 (“自动息屏分”)“”, “05”, 注册表_简单读 (“自动息屏分”))
秒.内容 = 选择 (注册表_简单读 (“自动息屏秒”)“”, “00”, 注册表_简单读 (“自动息屏秒”))
选择框VX.选中 = 选择 (注册表_简单读 (“是否锁定VX”)“1”, 真, )
置时间 ()
判断 (注册项是否存在 (4, “SOFTWARE\Microsoft\Windows\CurrentVersion\Run\”取执行文件名 ()) = )
开机自启.选中 = 真
开机自启.选中 = 假

热键_注册全局热键 (取窗口句柄 (), #Pause键, , &热键事件子程序)
监测时间戳 = [2024年11月1日1时1分1秒]
键盘钩子.安装钩子_键盘 (取窗口句柄 (), &键盘钩子事件, )
子程序名返回值类型公开备 注
键盘钩子事件  
参数名类 型参考可空数组备 注
按键类型整数型
键代码整数型
临界许可.进入 ()
监测时间戳 = 取现行时间 ()
空闲计数 = 0
临界许可.退出 ()
子程序名返回值类型公开备 注
热键事件子程序  
如果真 (选择框VX.选中)
锁定VX ()
程序_延时 (300, )
LockWorkStation ()
子程序名返回值类型公开备 注
置时间  
时1 = 到整数 (时.内容)
分1 = 到整数 (分.内容)
秒1 = 到整数 (秒.内容)
子程序名返回值类型公开备 注
__启动窗口_可否被关闭逻辑型 
可视 = 假
返回 ()
子程序名返回值类型公开备 注
__启动窗口_托盘事件  
参数名类 型参考可空数组备 注
操作类型整数型
弹出托盘菜单 (托盘菜单)
子程序名返回值类型公开备 注
_设置时间_被选择  
可视 = 真
子程序名返回值类型公开备 注
_开机自启_被选择  
开机自启.选中 = 取反 (开机自启.选中)
判断 (开机自启.选中 = )
写注册项 (4, “SOFTWARE\Microsoft\Windows\CurrentVersion\Run\”取执行文件名 (), 取运行目录 ()“\”取执行文件名 ())
删除注册项 (4, “SOFTWARE\Microsoft\Windows\CurrentVersion\Run\”取执行文件名 ())

判断 (注册项是否存在 (4, “SOFTWARE\Microsoft\Windows\CurrentVersion\Run\”取执行文件名 ()) = )
开机自启.选中 = 真
开机自启.选中 = 假

子程序名返回值类型公开备 注
_退出程序_被选择  
热键_撤销所有全局注册热键 ()
销毁 ()
结束 ()
子程序名返回值类型公开备 注
_暂停半小时_被选择  
暂停120 = 假
如果 (暂停30 = )
暂停30 = 真
暂停时间 = 取现行时间 ()
暂停30 = 假

子程序名返回值类型公开备 注
_暂停2小时_被选择  
暂停30 = 假
如果 (暂停120 = )
暂停120 = 真
暂停时间 = 取现行时间 ()
暂停120 = 假


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




回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:99% (95/96)
 楼主| 发表于 2025-3-14 10:58:20 | 显示全部楼层   江苏省徐州市
系统_取空闲时间 这个我没用,即使改成长整数那个64位的版本,时间长不关机还是会有问题
回复

使用道具 举报

结帖率:50% (1/2)
发表于 2025-3-14 11:06:17 | 显示全部楼层   广东省阳江市
用死循环别用时钟。假设在一个时钟周期内  没有把时钟里的逻辑执行完  那有可能出问题

点评

试验了,还是不行,不知道怎么的就自己终止运行了   江苏省徐州市  发表于 2025-3-20 11:11
回复

使用道具 举报

结帖率:99% (95/96)
 楼主| 发表于 2025-3-14 11:27:05 | 显示全部楼层   江苏省徐州市
小蛋疼 发表于 2025-3-14 11:06
用死循环别用时钟。假设在一个时钟周期内  没有把时钟里的逻辑执行完  那有可能出问题 ...

噢,谢谢,我试试
回复

使用道具 举报

签到天数: 1 天

发表于 2025-3-14 11:52:56 | 显示全部楼层   广东省汕尾市
回复

使用道具 举报

结帖率:0% (0/1)
发表于 2025-3-14 12:33:11 | 显示全部楼层   上海市上海市
针对你的自动锁屏程序在编译后长时间运行终止的问题,以下是逐步的解决方案:
1. 修正鼠标移动检测逻辑
问题:原代码使用“且”判断横纵坐标均变化才视为活动,导致灵敏度不足。
修改:将逻辑判断改为“或”关系。
  
如果 (鼠标坐标.横 ≠ 监测鼠标坐标.横 鼠标坐标.纵 ≠ 监测鼠标坐标.纵)
临界许可.进入 ()
监测鼠标坐标 = 鼠标_取位置 ()
监测时间戳 = 取现行时间 ()
空闲计数 = 0
临界许可.退出 ()




2. 优化空闲时间计算方式
问题:依赖时钟周期累加可能存在误差,改用系统时间差计算更准确。
修改:直接计算当前时间与最后一次活动的时间差。
  
空闲时间 = 取时间间隔 (取现行时间 (), 监测时间戳, #秒 )
标签5.标题 = 到文本 (空闲时间)“/”到文本 (时间阈值)
如果真 (空闲时间 > 时间阈值)
' 执行锁屏操作



3. 增强错误处理与日志记录
问题:未处理系统API和注册表操作可能引发的异常。
步骤:
在关键位置添加异常捕获和日志输出。
创建日志记录子程序:
  
子程序名返回值类型公开备 注
写日志  
参数名类 型参考可空数组备 注
内容文本型
变量名类 型静态数组备 注
文件号整数型 
文件号 = 打开文件 (取运行目录 ()“\log.txt”, , )
移到文件尾 (文件号)
写出文本 (文件号, 到文本 (取现行时间 ()) + “ ” + 内容 + #换行符 )
关闭文件 (文件号)

修改注册表操作和API调用部分:
  
子程序名返回值类型公开备 注
_确认_被单击  
.尝试
注册表_简单写 (“自动息屏时”, 时.内容)
.捕获 异常
写日志 (“注册表写入失败:” + 异常信息)
.尝试结束

4. 检查权限与防病毒拦截
问题:编译后的程序可能被安全软件拦截或权限不足。
解决:
以管理员权限运行编译后的程序。
将程序添加到防病毒软件的信任列表。
5. 处理系统休眠唤醒后的状态
问题:系统休眠恢复后程序状态可能未更新。
修改:在时钟周期事件开始处检测休眠恢复:
  
子程序名返回值类型公开备 注
_时钟_周期事件  
变量名类 型静态数组备 注
当前时间日期时间型 
当前时间 = 取现行时间 ()
如果真 (取时间间隔 (当前时间, 监测时间戳, #分钟 ) > 60)
' 可能刚从休眠恢复,重置监测时间
监测时间戳 = 当前时间

6. 确保资源释放
问题:钩子或临界区未正确释放可能导致资源泄漏。
修改:在程序退出时确保释放资源:
  
子程序名返回值类型公开备 注
_退出程序_被选择  
键盘钩子.卸载钩子_键盘 ()
临界许可.销毁 ()
热键_撤销所有全局注册热键 ()
销毁 ()
结束 ()

7. 验证热键和钩子注册
问题:热键冲突或钩子安装失败导致不稳定。
修改:检查热键注册结果:
  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
结果逻辑型 
结果 = 热键_注册全局热键 (取窗口句柄 (), #Pause键, , &热键事件子程序)
如果真 (结果 = )
写日志 (“全局热键注册失败”)

8. 使用更可靠的锁屏方法
问题:LockWorkStation可能在某些系统版本上受限。
替代方案:调用系统命令行锁屏:
  
子程序名返回值类型公开备 注
锁定系统  
运行 (“rundll32.exe user32.dll,LockWorkStation”, 假, )

9. 最终测试建议
在编译版本中添加详细日志,观察程序终止前的最后记录。
模拟长时间运行(可使用虚拟机或测试机持续运行)。
监控内存和句柄使用情况,确保无泄漏。
通过以上步骤,应能有效定位并解决程序异常终止的问题。重点在于加强错误处理、修正逻辑判断、确保资源管理,以及增加日志记录以便追踪问题根源。


回复

使用道具 举报

结帖率:100% (2/2)

签到天数: 1 天

发表于 2025-3-14 14:49:35 | 显示全部楼层   辽宁省丹东市
用线程 死循环

点评

试了,不行的   江苏省徐州市  发表于 2025-3-20 11:12
回复

使用道具 举报

结帖率:92% (33/36)

签到天数: 1 天

发表于 2025-3-14 15:31:22 | 显示全部楼层   陕西省汉中市
阿狸阿狸 发表于 2025-3-14 12:33
针对你的自动锁屏程序在编译后长时间运行终止的问题,以下是逐步的解决方案:
1. 修正鼠标移动检测逻辑
问 ...

送你上去回答的详细专业
回复

使用道具 举报

结帖率:88% (36/41)

签到天数: 1 天

发表于 2025-3-14 21:38:13 | 显示全部楼层   河北省衡水市
给个许可证 应该就没事了,

点评

哪里给许可证?   江苏省徐州市  发表于 2025-3-20 11:12
回复

使用道具 举报

结帖率:99% (95/96)
 楼主| 发表于 2025-3-20 11:11:59 | 显示全部楼层   江苏省徐州市
阿狸阿狸 发表于 2025-3-14 12:33
针对你的自动锁屏程序在编译后长时间运行终止的问题,以下是逐步的解决方案:
1. 修正鼠标移动检测逻辑
问 ...

那么厉害的,我在试试哈,目前还是没找到原因
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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