明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: wb0815

能否用lisp或者vlisp获取cmos的系统时间

  [复制链接]
发表于 2004-1-14 20:37:00 | 显示全部楼层
这怎么比较得出??假设1月1日(有效期内)执行程序,你记下这个日期,以后执行程序前把日期改为1月1日,这样你记下的仍然是1月1日,这样就成了同一天执行两次而已.
 楼主| 发表于 2004-1-15 08:39:00 | 显示全部楼层
不是你不是写出一个时间吗当程序执行的时候先读当前时间和第一次写出的时间
给你参考一下
   (setq date (getvar "cdate"))
   (setq z (rtos date 5 0))
   (setq x (atoi z))
   (setq lujing "c:\\winnt\\system32\\winnt.sys")
   (setq out (open lujing "r"))
   (setq da (read-line  out))
   (setq da1 (atoi da ))
   (setq  da2 (read-line  out))
   (setq da3 (atoi da2 ))
   (setq  ww (read-line  out))
   (setq yy7 (read-line  out))
   (close out)
   (setq da4 (- da3 1))
   (setq dd (rtos da4))
   (setq su (/  (+ 96224 da1)5 ))
   (setq cc (- x su ))
   (setq ww1  (atoi ww))
   (setq ww2 (/ (+ ww1 5685135) 23))
   (setq oo2 (rtos ww2 2 2 ))
   (if (>= (- ww2 x ) 1 )
   (progn
       (alert (strcat "您不可以更改系统时间,如果您还想继续使用请将时间改回:" oo2))
       (alert "程序将保存退出")
       (command "qsave")
       (command "quit" "y" )
       (setq lujing "c:\\winnt\\system32\\winnt.sys")
       (setq out (open lujing "w"))
       (write-line da out)
       (write-line da2 out)
       (write-line ww out)
       (write-line yy7 out)
       (close out)
       )
       )
发表于 2004-1-15 19:08:00 | 显示全部楼层
不好意思我不懂lisp,能不能说一说思路?
我只是请问,假设真实日期是12月1日(有效期外),我每次运行程序前先把日期改到1月1日,然后再运行程序,你怎么知道这个1月1日是真的还是假的?
发表于 2004-1-16 08:07:00 | 显示全部楼层

[转帖]

許多心理測量軟件在最初發佈的時候往往不為人所知,為了讓大家瞭解和接納,開發上往往會有一些共享測試軟件。一些共享軟件往往提供給使用者的是一個功能不受限制的限時使用版,在試用期內使用者可以無限制的使用軟件的全部功能(只是可能會出現提示使用者註冊的窗口),試用期一過部分(或全部)功能失效,要想繼續使用只能向作者索取註冊碼(或註冊文件)完成對軟件的合法註冊,註冊後的軟件將解除一切使用限制。如果您也開發出一個有價值的作品,是否也希望為自己的軟件增加一個這樣的功能呢?這裡筆者就提供一個實現軟件限時的完整代碼。
  軟件啟動後會首先運行本代碼並從註冊表HKEY_LOCAL_MACHINE\Software\MyProgram子鍵下的三個鍵值MyProgram1-3中讀取鍵值數據。其中MyProgram2的值是軟件首次運行日期,MyProgram3的值是軟件當前運行時的日期,MyProgram1的值是軟件的使用標誌:如果軟件在試用期內則其值為字符串sign1;如果軟件試用期滿則其值為字符串sign2,如果軟件已經註冊則其值為字符串sign3。全局變量ZHUCE依據讀取的MyProgram1鍵值而賦值:ZHUCE=-1說明試用期滿,ZHUCE=-2說明軟件已註冊,ZHUCE=其它值為剩餘天數,您的主程序代碼要依據此全局變量ZHUCE的值設計相應的交互響應。
  為方便您將代碼嵌入現存的程序代碼中,本示例將全部代碼寫入一個模塊.bas中(模塊名隨意,也可添加到已有模塊中)。注意,代碼中的Private Sub Main()過程為整個程序的啟動入口,您需要在「工程屬性」對話框中將「啟動對像」設置為「Sub Main()」。
'通用模塊
Global ZHUCE As Integer
'說明:全局變量ZHUCE=-1試用期滿,ZHUCE=-2已註冊,ZHUCE=其它值為剩餘天數
Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, ByRef phkResult As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long
Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long

Private Sub Main()'程序總入口
Dim a As Long, rc(3) As Long, hKey As Long, KeyValType As Long, KeyValSize(3) As Long
Dim c As String, h As String, tmpVal(3) As String
Dim datetime As Integer
datetime = 30'試用期天數
ZHUCE = -1
On Error GoTo cuowu
'以下從註冊表HKEY_LOCAL_MACHINE\Software\MyProgram的三個值中取出相關數據字串tmpVal(3)
a = RegOpenKeyEx(&H80000002, "Software\MyProgram", 0, 131135, hKey) ' 打開註冊表關鍵字
For a = 1 To 3: tmpVal(a) = String$(1024, 0): KeyValSize(a) = 1024: Next
rc(1) = RegQueryValueEx(hKey, "MyProgram3", 0, KeyValType, tmpVal(1), KeyValSize(1))
rc(2) = RegQueryValueEx(hKey, "MyProgram2", 0, KeyValType, tmpVal(2), KeyValSize(2))
rc(3) = RegQueryValueEx(hKey, "MyProgram1", 0, KeyValType, tmpVal(3), KeyValSize(3))
For a = 1 To 3
If (Asc(Mid(tmpVal(a), KeyValSize(a), 1)) = 0) Then
tmpVal(a) = Left(tmpVal(a), KeyValSize(a) - 1)
Else
tmpVal(a) = Left(tmpVal(a), KeyValSize(a))
End If
Next
a = RegCloseKey(hKey) '關閉註冊表

'使用期限判斷
If tmpVal(3) = "sign3" Then ZHUCE = -2: Exit Sub '查找到已註冊標誌sign3
If Len(tmpVal(1)) = 1023 And Len(tmpVal(2)) = 1023 And Len(tmpVal(3)) = 1023 Then
'首次使用,將當前日期分別寫入tmpVal(1)和tmpVal(2)中,在tmpVal(3)中寫入准許運行標誌sign1
CreateObject("WScript.Shell").regWrite "HKEY_LOCAL_MACHINE\Software\MyProgram\MyProgram3", Date$, "REG_SZ"
CreateObject("WScript.Shell").regWrite "HKEY_LOCAL_MACHINE\Software\MyProgram\MyProgram2", Date$, "REG_SZ"
CreateObject("WScript.Shell").regWrite "HKEY_LOCAL_MACHINE\Software\MyProgram\MyProgram1", "sign1", "REG_SZ"
ZHUCE = datetime
MsgBox "試用期剩餘" & Trim(datetime) & "天"
Else
If tmpVal(3) = "sign2" Then '查找到永久中止標誌sign2中止使用
ZHUCE = -1
Exit Sub
MsgBox "試用期已滿,請您註冊!"
End If
If Date < DateValue(tmpVal(2)) Then '人為將系統日期往回更改中止使用
'寫入tmpVal(3)中止使用字串「sign2」
CreateObject("WScript.Shell").regWrite "HKEY_LOCAL_MACHINE\Software\MyProgram\MyProgram1", "sign2", "REG_SZ"
ZHUCE = -1
MsgBox "試用期已滿,請您註冊!"
Else
If DateValue(Date) - DateValue(tmpVal(1)) > datetime Then '使用期超過datetime天中止使用
'寫入tmpVal(3)中止使用字串sign2
CreateObject("WScript.Shell").regWrite "HKEY_LOCAL_MACHINE\Software\MyProgram\MyProgram1", "sign2", "REG_SZ"
ZHUCE = -1
MsgBox "試用期已滿,請您註冊!"
Else
'寫入當前日期於tmpVal(2)中
CreateObject("WScript.Shell").regWrite "HKEY_LOCAL_MACHINE\Software\MyProgram\MyProgram2", Date$, "REG_SZ"
ZHUCE = datetime - (DateValue(Date) - DateValue(tmpVal(1)))
MsgBox "試用期剩餘" & Trim(datetime) & "天"
End If
End If
End If
cuowu:
End Sub

  從安全保密角度出發,當您應用上述代碼時紫色部分應該根據您個人的保密設想進行必要的修改(當然您也可以不修改而直接應用):1示例中的代碼把軟件的註冊與運行信息保存在HKEY_LOCAL_MACHINE\Software\MyProgram子鍵下的MyProgram1-3三個鍵值內,請根據您個人的保密原則修改為您所需要的子鍵名,以隱蔽為原則!2MyProgram1鍵值中的數據(字符串sign1或sign2或sign3分別對應著試用/期滿/註冊)應根據您個人的保密設想修改成需要的字符串,也以隱蔽為原則!
  主程序中當用戶輸入正確的註冊碼(註冊碼當然是您隨意願而設)後,請執行語句:
CreateObject("WScript.Shell").regWrite "HKEY_LOCAL_MACHINE\Software\MyProgram\MyProgram1", "sign2", "REG_SZ"
完成軟件註冊。(該行代碼中的Software\MyProgram\MyProgram1和sign2請與上述代碼保持一致!)

  以上代碼在VB6、Win95/98/NT/Me/2000下調試通過。



以上的方法最怕就是把註冊資料整個刪除,即回到原始未安裝狀態,只好再想辦法,當首次運行除了註冊資料外再加一個參考檔,如meflying版主所說把它看起來不起眼(把檔名改為xxx.tmp / xxx.sys,放在一些看來很重要的目錄裡如c:\winnt\system,通常大家都不敢隨便動它),當兩種檔案都存在時,程序才能運行。
注意: 註冊資料最好編碼處理
发表于 2004-1-16 09:05:00 | 显示全部楼层
以下是我用在cad中的做法,提供參考
1.使用安裝程式,安裝時確認存在特定次目錄時才能安裝,特定次目錄中放入隱藏的程式執行必 要條件之一
2.程式中設定時間限制,綁定acad200x.fas,另綁入兩個不起眼的檔案,四者缺一不可
3.acad200x.fas設定參數,必須存在"我的acad200x.fas"才能使用
3.時間限制一到,自動刪除acad200x.fas,之後不影響cad的使用,程式無法使用而已
4.程式可放在明顯次目錄下,有人敢copy就讓他copy吧,後果自行負責(內容保留)
 楼主| 发表于 2004-1-16 13:21:00 | 显示全部楼层
我的程序是我提供授权号码然后将这个文件的时间写出去。不得修改
发表于 2004-1-16 17:31:00 | 显示全部楼层
有琢磨如何加密的时间不如用于琢磨怎样把程序写得更好...8-)
发表于 2004-1-16 18:33:00 | 显示全部楼层
e2002发表于2004-1-16 17:31:00有琢磨如何加密的时间不如用于琢磨怎样把程序写得更好...8-)


同意,把这时间用来写程序可以升级几次了。
发表于 2004-1-16 19:20:00 | 显示全部楼层
这些方法好像都无法阻止修改日期后再执行程序.我觉得关键是如何获得当前真正的日期.各位有什么好办法吗?
发表于 2006-3-9 20:34:00 | 显示全部楼层

我的程序是通过读次数注册的。通过一段简单的计算式来获取注册码。还是好好的编写程序方面吧,这样才是正道。

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-9 02:27 , Processed in 0.148036 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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