Authorware实战开发专题(6-4)

  •   2009-07-09/15:35
  •    E-Mail注册法

    喜欢上网的用户几乎都拥有自己的电子信箱(E-Mail),不管是免费的还是付费的,都为大家的交流带来了巨大的方便。因此可以利用电子邮件从Authorware作品作者获取正确注册码,一种常用的方法是程序开发作者发布程序给用户,用户在本机执行并计算出本机机器码,然后通过邮件把机器码发送给作者,作者获得用户的机器码后,通过自己的注册码生成器产生一个有效的注册码,然后再发送回给用户,这样用户就可以在主程序中输入正确的注册码以完成注册工作。如果产生用户的机器码呢?方法很多,一般都是和用户的计算机硬件联系起来,下面我们就以用户的硬盘分区序列号来产生机器码。

    实例说明:

    本实例的实现原理基于硬盘分区序列号。在对硬盘分区格式化之后,每个驱动器都会有一个唯一的序列号(Volume Serial Number),就是用VOL命令列出的16进制数,这个号码可以用于注册、加密、防拷贝等用途。本实例就是通过用户计算机的硬盘某分区序列号产生机器码,并发送给作品作者用以产生有效的注册码。执行界面如下图6.18所示,程序流程图如图6.19所示。



    图6.18 产生用户机器码



    图6.19 程序流程图

    实例分析:

    1) 获取用户计算机的机器码

    新建一个“HardKey.a6p”文件,在流程上拖入一个计算图标,并命名为“获得机器码”,在计算图标里写入以下代码:

    ResizeWindow(320,160) ---设置屏幕演示大小

    SetWindowText(WindowHandle,"获取本机机器码") ---设置窗口标题

    mem2 := AllocMem(1)

    GetVolumeInformation("c:\\","",30,mem2,256,"","",30)

    HardSerialNumber:=mem2

    FreeMem(mem2)


    其中SetWindowText是窗口标题设置函数,封装于Winapi.u32,它是Authorware 6.0的一个附带扩展函数库,在Authorware 6.0的安装根目录下可以找到。AllocMem、FreeMem这两个函数是封装于memtools.u32的内存分配函数,memtools.u32也是Authorware 6.0的一个附带扩展函数库。本代码中的关键函数就是GetVolumeInformation,它也是Winapi.u32的函数一员,用于实现对硬盘某分区序列号的获取,并返回一个10进制的序列号。

    2) 设计程序背景图

    在1)中我们建立了一个自定义变量“HardSerialNumber”来记录读取出来的序列号,即我们所谓的机器码,程序背景图设计如下图6.20所示:



    图6.20 背景图的设计

    这里要注意要把显示图标“显示机器码”的显示属性“Update Displayed Variables”选项选中,这样变量才会动态改变。

    3) 设计发送邮件交互

    如图6.19流程所示,添加一个交互图标到流程上,然后建立“发送机器码”和“退出”按钮响应分支。发送机器码响应分支的计算图标代码如下:

    ShellExecuteA(WindowHandle,"open","mailto:hellrock@163.com?Subject=请求注册&body=机器码:"^HardSerialNumber,"","",5)

    其中ShellExecuteA是Windows(或WINNT)系统目录下shell32.dll的一个封装函数,提醒大家注意Windows(或WINNT)目录下有丰富的DLL动态连接库,这些都是可以为Authorware所利用的扩展函数,导入方法和导入U32函数方法类似,具体可以参考下图6.21,当导入成功后就会出现如图6.21左下角的成功提示信息。



    图6.21 导入DLL函数

    最后在退出响应分支的计算图标里写入系统函数:quit(0),这样就大功告成了,赶快执行一下,当按“发送机器码”按钮的时候将会自动打开系统默认的邮件发送程序把机器码作为正文发送,执行效果如下图6.22所示:



    图6.22 发送注册码执行效果

    这样作为Authorware作品的作者一方就可以根据用户的机器码通过一定的算法产生一个有效的注册码并返回给用户,需要注册的Authorware程序的注册模块制作方法类似于上文的“注册输入法”。

    专题总结

    以上的四种方法是Authorware作品的常用保护加密方法,但是“道高一尺,魔高一丈”、“一高还有一山高”,本文只是起抛砖引玉的作用,给读者一个参考,具体实现方式还是请读者自己思考!


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多