设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: Happyboy
打印 上一主题 下一主题

[其它] 一个关于软件保护的问题

[复制链接]
41#
 楼主| 发表于 2005-5-28 04:51:00 | 只看该作者


问题:如果那个读硬盘序列号的程序没有放在c:\windows下面,这个软件却可以正常使用。如果放在c:\windows下面,才能达到提示是否注册。这是为什么啊?应该怎么改正?

现在只要添加一个如果在c:\windows下面没有发现读硬盘序列号的程序,那就处于试用期阶段。

应该怎么改呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
42#
发表于 2005-5-28 05:36:00 | 只看该作者
我的方法是在程序里利用序列号用自己的算法得到的结果与用户注册后在文件中的注册信息进行比较(也可以是在表中保存),如果正确再与注册后写到注册表中的信息进行比较,这样当用户修改任何一处都会得到注册信息破坏的结果.如果注册信息为NULL就表示未注册版本.
43#
 楼主| 发表于 2005-5-28 06:00:00 | 只看该作者
clu172,谢谢你的指点!不置可否把你的文件给我传一份呢?也让我学习学习!budingxizhilang@163.com先谢谢了!
44#
发表于 2005-5-28 06:33:00 | 只看该作者
我的文件不知道放哪里了,你改改就行Function GetSerialNumber(strDrive As String) As Long

     

     Dim SerialNum As Long

     

     Dim Res As Long

     Dim Temp1 As String * MAX_FILENAME_LEN

     Dim Temp2 As String * MAX_FILENAME_LEN

     

     Res = GetVolumeInformation(strDrive, Temp1, _

     Len(Temp1), SerialNum, 0, 0, Temp2, Len(Temp2))

     

     GetSerialNumber = SerialNum

     

End Function

Private Sub cmdOK_Click()

    n = Abs(GetSerialNumber(Left(App.Path, 3)))

    For a = 1 To Len(n)

        c = c + Mid(n, (Len(n) + 1) - a, 1)

    Next

    d = str(c)

    p = 1

    If Len(d) < 20 Then

        d = d + String(20 - Len(d), "X")

    ElseIf Len(d) > 20 Then

        d = Left(d, 20)

    End If

    For i = 1 To 20

        If Len(str(Asc(Mid(d, i, 1)))) > 3 Then

            p = p + Mid(str(Asc(Mid(d, i, 1))), 2, 2) * 199

        Else

            p = p + Asc(Mid(d, i, 1)) * 199

        End If

    Next

    If Val(Trim(strWRegistration.Text)) <> p Then

        MsgBox "注册码错误!", vbCritical, "错误"

        End

    Else

        SaveSetting "TransnationalProgram", "Registration", "RecogniseCode", p

        SaveSetting "TransnationalProgram", "Registration", "UserName", Trim(strWUserName.Text)

        MsgBox "请重新运行程序验证注册是否成功", vbInformation, "启动"

        End

    End If

End Sub

Private Sub Form_Load()

    lblValidate.Caption = lblValidate.Caption + str(Abs(GetSerialNumber(Left(App.Path, 3))))

    Me.Hide

    SaveSetting "TransnationalProgram", "Registration", "Validate", str(Abs(GetSerialNumber(Left(App.Path, 3))))

    n = Abs(GetSerialNumber(Left(App.Path, 3)))

    For a = 1 To Len(n)

        c = c + Mid(n, (Len(n) + 1) - a, 1)

    Next

    d = str(c)

    p = 1

    If Len(d) < 20 Then

        d = d + String(20 - Len(d), "X")

    ElseIf Len(d) > 20 Then

        d = Left(d, 20)

    End If

    For i = 1 To 20

        If Len(str(Asc(Mid(d, i, 1)))) > 3 Then

            p = p + Mid(str(Asc(Mid(d, i, 1))), 2, 2) * 199

        Else

            p = p + Asc(Mid(d, i, 1)) * 199

        End If

    Next

    If GetSetting("TransnationalProgram", "Registration", "RecogniseCode") <> p Then

        MsgBox "未注册版本,请注册!", vbInformation, "注册"

        Me.Show

    Else

        frmLogin1.Show

    End If

End Sub

45#
 楼主| 发表于 2005-5-28 06:49:00 | 只看该作者
你帮我做到我的附件里面吧,谢了!怎么改也不对!!!
46#
发表于 2005-5-28 07:15:00 | 只看该作者
在模块里加一个API函数.  Private Declare Function GetVolumeInformation Lib _

     "kernel32.dll" Alias "GetVolumeInformationA" (ByVal _

     lpRootPathName As String, ByVal lpVolumeNameBuffer As _

     String, ByVal nVolumeNameSize As Integer, _

     lpVolumeSerialNumber As Long, lpMaximumComponentLength _

     As Long, lpFileSystemFlags As Long, ByVal _

     lpFileSystemNameBuffer As String, ByVal _

     nFileSystemNameSize As Long) As Long

     

Public Const MAX_FILENAME_LEN = 256

47#
发表于 2005-5-28 07:20:00 | 只看该作者
注意我用的是当前盘的卷序号
48#
 楼主| 发表于 2005-6-1 17:58:00 | 只看该作者
唉!不好意思,chul72,我还是做不出来。不知道那里出了问题!还是请高手做在附件里面吧!先谢了!
49#
发表于 2005-6-1 18:49:00 | 只看该作者
你可以用dir方法检查c:\windows下面那个读硬盘序列号的程序是否存在!不存在就提示注册!
50#
 楼主| 发表于 2005-6-1 23:36:00 | 只看该作者
我以前的思路就是:1,现判断是否注册,如果没有注册,那就有试用次数。次数一到,就不能进入了。2,在试用其间,如果注册了,以后就不用再提示注册了。如果按照binuochao的意思,那代码应该怎么改?我没有用过dir
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-22 12:52 , Processed in 0.084088 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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