名 中文含义 类型 宽度 小数位 索引 排序 1 BH 编号 字符型 2 2 XM 字符型 8 3 PASSKL 口令字 字符型 12 4 QX 权限 数值型 1 5 VARJB 硬盘卷标 数值型 12 ** 总计 ** 36 ========================================================= 二、Main.prg 系统初始化主程序,大家在调试时务必首先运行它,否则后面的模块无法运行。 它很简单: set stat off set scor off set date ansi set century on set hours to 24 set escape off set dele on set safe off SET STATUS BAR OFF SET SYSMENU TO
SET SYSMENU AUTOMATIC on shutdown quit debug0=.t. &;&;为后面的模块提供检测菜单是否运行的条件 Dqml=sys(5)+sys(2003)+'' &;&;取当前目录,调试时请您改为本
程序所在目录 do (Dqml+'菜单 1.mpr') &;&;打开菜单文件 do form (Dqml+'pass') &;&;打开效验口令字表单 read even on shutdown rele debug0 set sysmenu on set sysmenu to defa on error 三、pass.scx 表单。 功能:口令字效验、取出 KLK 中保存的硬盘卷标、判断当前硬盘卷标是否 合法、 取出 KLK 中的权限。 在表单及对象的方法或事件中,各自的代码是: 1.this.ini if type('debug0')='U' &;&;如果未通过 Main.prg 而调式,则: wait wind '请您从执行 Main.PRG 开始,进行调式......' this.release retu endi ******以下为解密 klk.dat 文件************************************** thisform.Vfpjmdbf1.pass_kl='12345678' &;&;设置加解密口令 thisform.Vfpjmdbf1.path_ml=dqml &;&;设定 klk.dat 文件所在目录 thisform.Vfpjmdbf1.jiEmi_file='klk.dat' &;&;存放密码的资料库文件名 thisform.Vfpjmdbf1.jiEmi &;&;解密 klk.dat 文件,并打开以'klk'为别名的
工作区 thisform.Vfpjmdbf1.Visible=.f. &;&;隐藏 Vfpjmdbf1 Go top ******************以下为取磁盘卷标的 WIN32API 调用******************* Stor 0 to C_var,C_cd,C_qf C_disk='c:' &;&;指定磁盘 DECLARE INTEGER GetVolumeInformation IN Win32API STRING @, STRING @,; INTEGER,; INTEGER @, INTEGER @, INTEGER @, STRING @, INTEGER xx=GetVolumeInformation(C_disk,"",20,@C_var,@C_cd,@C_qf,0,0) CLEAR DLLS * C_var=指定磁盘的卷标,是个十进制的数值
。 if varjb=0 &;&;klk.varjb=0 表明是第一次运行本软件 repl varjb with C_var &;&;将磁盘卷标写入 klk.varjb 字段 thisform.Vfpjmdbf1.jiAmi_file='' thisform.Vfpjmdbf1.jiAmi &;&;先关闭,以保存修改 *要保存修改必须经 Vfpjmdbf1.jiAmi 来关闭库才行, thisform.Vfpjmdbf1.jiEmi_file='klk.dat' &;&;存放密码的资料库
thisform.Vfpjmdbf1.jiEmi &;&;再打开 else &;&;否则是已运行过本
软件 if varjb<>C_var &;&;判断 klk.varjb 是否等于当前磁盘卷标(C_var) =Messagebox("对不起!您现在运行的软件未经过作者确认,不能运行... ",; 0+48+0,"警告") quit endi endi 2.this.unload if type('debug0')='U' do Case &;&;根据 klk.qx 字段决定菜单的屏蔽操作 case qx=1 set skip of bar 1 of 权限 F .t. set skip of bar 2 of 权限 F .t. case qx=2 set skip of bar 1 of 权限 F .t. set skip of bar 2 of 权限 F .t. set skip of bar 3 of 权限 F .t. endc use &;&;关闭 klk endi 3.thisform.text1.keypress if nKeyCode#13 retu endi loca for allt(this.value)==allt(Passkl) &;&;查找相符的口令字 if !foun() =Messagebox("对不起!您的口令有误,不能运行...... ",; 0+48+0,"警告") thisform.release quit &;&;退出
系统,为了简单,口令效验我只设了一次。 endi thisform.release 四、查看和修改 KLK 的表单,这里就不具体写代码了。 五、菜单 1.MPR 主菜单,这