Michaels 发表于 2022-7-6 09:48:14

在特定的d处停止例程

是否可以控制Lisp例程在经过特定日期后甚至不运行后停止工作
 
如果用户将计算机的日期向后推?
 
非常感谢

Smirnoff 发表于 2022-7-6 09:52:02

像这样的。如果时间尚未过期且系统时间未更改,则此函数返回T。但您可以使用比通过“setenv”函数设置环境变量更秘密的方法。例如,将数据写入注册表或某些密文文件。
 
当然用户可以每天设置相同的日期,但这并不方便。这也是可以设想的。
 
(defun TimeControl(Days / Pass)
(if(not(getenv "FirstDate"))
   (setenv "FirstDate"(itoa(fix(getvar "CDATE"))))
   ); end if
(if(not(getenv "LastDate"))
   (setenv "LastDate"(getenv "FirstDate"))
   ); end if
(setq lDate(atoi(getenv "LastDate"))
fDate(atoi(getenv "FirstDate"))
cDate(fix(getvar "CDATE")))
(cond
   ((> cDate lDate)
    (alert "Your system time has been changed.\n Bue, bue bad guy... ")
    ); end condition #1
   ((>(- cDate fDate)Days)
   (alert "Your time has been expired.\n Call me baby. ")
    ); # end condition #2
   (T (setq Pass T)
   (setenv "LastDate"(itoa(fix(getvar "CDATE"))))
   ); end condition #3
    ); end cond
   Pass       
); end of TimeControl

Michaels 发表于 2022-7-6 09:55:35

 
非常感谢,非常感谢。
 
我想知道更多关于注册表处理字符串的方式的信息。
 
那你能给我推荐点什么吗?
 
当做
 
迈克尔

Guest kruuger 发表于 2022-7-6 10:01:22

写入注册表:
(vl-registry-write "HKEY_CURRENT_USER\\Software\\MyApp" "Day left" "30")
从reg读取:
(vl-registry-read "HKEY_CURRENT_USER\\Software\\MyApp" "Day left")
k

Michaels 发表于 2022-7-6 10:01:45

 
谢谢克鲁格。
 
那么注册表的(setenv)和您的之间有什么区别呢。。
 
(vl注册表写入“HKEY\U CURRENT\U USER\\Software\\MyApp”“Day left”“30”)
 
还有第二个是从(getenv)和您的。。。
 
(vl注册表读取“HKEY\U CURRENT\U USER\\Software\\MyApp”“还剩一天”)
 
非常感谢。

Organic 发表于 2022-7-6 10:05:00

你需要这个做什么?

Michaels 发表于 2022-7-6 10:08:22

:lol:

Guest kruuger 发表于 2022-7-6 10:12:19

两种方法相同。sava数据到注册表。
setenv,getenv-将数据保存到“autocad环境”(你在那里制造了大量数据,我不喜欢这样)
vl。。将数据保存到您的特定位置-我更喜欢这样
k

Smirnoff 发表于 2022-7-6 10:17:22

我有一些不使用注册表和任何文件的好主意。FAS文件(编译的LSP文件)文件可以使用vlisp编译功能在每次运行时使用新数据重新编译。我会尽量在有更多时间的时候实施。我明天要去俄罗斯出差,所以不早于周六。

Guest kruuger 发表于 2022-7-6 10:21:33

这可能有用。这很聪明
k
页: [1] 2
查看完整版本: 在特定的d处停止例程