标题:如何实现5分钟未对vfp编的软件操作就退出
只看楼主
tbk_lcy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2022-12-30
得分:0 
回复 8楼 sam_jiang
能否提供一个简单地编码?
2023-01-18 08:53
aqyejun
Rank: 3Rank: 3
等 级:论坛游民
威 望:9
帖 子:121
专家分:99
注 册:2010-6-11
得分:0 
补充回答楼主问题:可以用 MyFll.Fll的idleLoad()函数。
SET library to lib\MyFll.Fll
idleLoad("MessageBox('系统空闲,5分钟后将自动退出!',48,'提示')",300)
idleLoad("do prg\quit.prg",300)

代码加入到主程序中即可。

[此贴子已经被作者于2023-1-18 09:16编辑过]


【独叶为舟】工作室
2023-01-18 09:12
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用aqyejun在2023-1-18 08:49:40的发言:

如果vfp程序有打开的表单没有关闭,或有预览的报表没有关闭,自动退出时会报错,则无法定时退出程序。这个有何解决方法?

表单、预览的报表都可以用代码关闭,或者试试QUIT。
2023-01-18 09:32
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
用GetLastInputInfo()的简单示例
程序代码:
DECLARE long GetLastInputInfo IN user32 string@
of = CREATEOBJECT("Form1")
of.show(1)
CLEAR ALL 
RETURN

DEFINE CLASS Form1 As Form 
    AutoCenter=1
    AllowOutput=0
    
    nLastInputTime = 0
    nLastTime = 0
    
    ADD OBJECT Timer1 AS Timer WITH Interval=1000
    ADD OBJECT Text1 AS TextBox WITH Top=10,Left=10,Value=0

    PROCEDURE Timer1.Timer
        IF INT(thisform.myGetLastInputInfo()/1000) == thisform.nLastInputTime
            IF (INT(SECONDS()) - thisform.nLastTime) > 10
                MESSAGEBOX("鼠标键盘无动作超过10秒关闭退出")
                thisform.Release
            ELSE
                thisform.Text1.Value = thisform.Text1.Value + 1
            ENDIF
        ELSE
            thisform.nLastInputTime = INT(thisform.myGetLastInputInfo()/1000)
            thisform.nLastTime = INT(SECONDS())
            thisform.Text1.Value = 0
        ENDIF
    ENDPROC

    FUNCTION myGetLastInputInfo
        LOCAL lii
        lii = 0h0800000000000000    && struct LASTINPUTINFO
        GetLastInputInfo(@lii)
        RETURN CTOBIN(RIGHT(lii, 4), "4RS")
    ENDFUNC
ENDDEFINE
2023-01-18 09:36
aqyejun
Rank: 3Rank: 3
等 级:论坛游民
威 望:9
帖 子:121
专家分:99
注 册:2010-6-11
得分:0 
以下是引用吹水佬在2023-1-18 09:32:28的发言:


表单、预览的报表都可以用代码关闭,或者试试QUIT。

请教表单、预览的报表可以用什么代码关闭?quit不行。

【独叶为舟】工作室
2023-01-18 09:40
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:2 
8楼的办法可取。定义一个全局的时间变量,在程序中有任何鼠标或键盘操作时则更新这个时间变量,在程序中随时检测这个时间变量与当前时间的差,符合预定值后立即执行关闭程序的代码。

活到老,学到老! http://www. E-mail:hu-jj@
2023-01-18 09:42
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
回复 15楼 aqyejun
可以用close all来关闭已经打开的表、表单、报表等,然后再执行quit。

活到老,学到老! http://www. E-mail:hu-jj@
2023-01-18 09:44
aqyejun
Rank: 3Rank: 3
等 级:论坛游民
威 望:9
帖 子:121
专家分:99
注 册:2010-6-11
得分:0 
回复 17楼 hu9jj
quit.prg使用了:
CLOSE All &&关闭各种类型的文件,但不关闭命令窗口、调试窗口、帮助、跟踪窗口。
CLOSE Database &&关闭所有数据库
Clear Menus &&释放内存中所有的菜单定义。
Release ALL EXTENDED &&释放内存中所有变量。
Clear Popups &&释放内存中所有用DEFINE POPUP命令创建的菜单定义。
Clear Windows &&释放内存中所有用户自定义窗口的定义,并从VFP主窗口或活动的用户自定义窗口中清除窗口。
Clear &&清屏
QUIT &&退出
其中还有其他数据库操作代码,估计有影响自动退出功能!
另说明:
【idleLoad("do prg\quit.prg",300)】中的“300”可以用全局变量替代,程序中可自定义!

【独叶为舟】工作室
2023-01-18 09:50
aqyejun
Rank: 3Rank: 3
等 级:论坛游民
威 望:9
帖 子:121
专家分:99
注 册:2010-6-11
得分:0 
发现预览的报表很难用程序代码关闭!

【独叶为舟】工作室
2023-01-18 09:53
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用aqyejun在2023-1-18 09:53:42的发言:

发现预览的报表很难用程序代码关闭!

异步打开应该可以,加个NOWAIT子项试试
2023-01-18 10:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511130-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051078 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved