这种方式是如何做到的?急。(200分)

  • 主题发起人 主题发起人 g622
  • 开始时间 开始时间
G

g622

Unregistered / Unconfirmed
GUEST, unregistred user!
某些软件如果您安装了它,然后超过了免费使用期,下次你想通过谢载
再安装的办法来使用它就会直接退出或警告,它是如何做到的?它怎么
知道你曾经安装过这个软件并过了免费使用期。一定是直接在硬盘之类
的地方写了什么(不要说是写了个文件啊 :)),我现在的办法是直接在
notepad.exe文件后面写,但........... :(
向各位大侠请教。如能给出范例者再加300分。谢谢。
 
可以在注册表作标记。
 
我的程序中采用了两个办法,一是在注册表中写入一段信息,二是在Windows的System目录
中写入一个隐藏文件。往注册表中写的时候是写在“HKEY_CLASSES_ROOT/CLSID”下面,自己
编一个GUID,然后往下面写一些看起来和你的程序毫不相关的东西(虽然看起来不相关,相
检验各种东西就靠它了),你想想,CLSID下面有那么多个GUID,谁会去一个一个地翻看它
是干什么的!:P 至于写在System目录下的安全性没有写注册表高,在此就不多说了。
 
最拽可以写到cmos里
 
一般是注册表
 
写到注册表里,关系到注册表中的操作你可以在delphi里查阅关于TRegistryIniFile
的资料,不难的.

<人人为我,我为人人>
 
下面介绍TRegistry类的常用属性

1.CurrentKey:数据类型为HKEY;该属性指出当前打开的键。TRegistry对象的所有操作只影响当前打开的键。要读、写其他的键须调用TRegistry对象的OpenKey或OpenKeyReadOnly 方法。
2.CurrentPath: 数据类型为String;该属性指出与当前键相关的路径。CurrentPath返回注册表中包含从根键到当前键的层次结构的一个字符串。如:‘HKEY_CURRENT_USER/Network’。每当一个不同的键变成当前键时CurrentPath属性自动设置为相应的内容。

3.RootKey:数据类型为HKEY;该属性指出TRegistry类对象的根键。当创建一个TRegistry类对象时,其RootKey属性缺省值为HKEY_CURRENT_USER,可以通过为RootKey设定一个有效的整数值来改变根键。
  注意:对于一些操作,应用程序可能需要修改RootKey的值,如LoadKey或RegistryConnect操作。

下面介绍TRegistry类的方法

1.procedure CloseKey
  功能:将当前键写入注册表并关闭键。键关闭后CurrentKey属性无效。
  2.constructor Create
  功能:创建一个TRegistry类的对象,用于初始化一个TRegistry类对象。
  3.function CreateKey
 (const Key: String): Boolean
  功能:在注册表中创建一个键。
  参数:参数Key是要创建的键名。Key可以是相对名或绝对名。绝对键以反斜杠(/)开头而且是根键的子键。相对键则是当前键的子键。
  返回值:如果创建成功,该函数返回True;否则引起一个异常,并返回False。试图创建一个已存在的键是无效的。
4.function DeleteKey
 (const Key: String):Boolean
  功能:从注册表中移去一个指定的键和与之相关的数据。
  参数:参数Key指出要移去的键,对它的说明同上。
  返回值:删除操作成功返回True;否则返回Fasle。
  注:在Windows 95下,如果Key含有子键则子键和与之相关的数据也都被删除。 在Windows NT下,子键必须通过调用DeleteKey来分别删除。
  5.function DeleteValue
(const Name: String): Boolean
  功能:删除与当前键相关的一个数据值。
  参数:参数Name指出要删除的数据的名称。
  返回值:删除操作成功返回True;否则返回Fasle。
  6.function KeyExists
 (const Key: String): Boolean
  功能:确定一个特定键是否存在。
  参数:Key是要查询的键名。
  返回值:若存在则返回True;否则返回False。
  7.function OpenKey (const Key: String; CanCreate: Boolean): Boolean
  功能:打开一个指定的键。
  参数:Key指出要打开的键,如果它的值为空CurrentKey属性值设置为与RootKey属性值相同;CanCreate指出当Key所指键不存在情况下是否创建,为True时创建,为False时不创建。
  返回值:当键成功打开或创建时返回True,否则返回False。
  8.function ValueExists
(const Name: string): Boolean
  功 能:确定当前键中是否有一个指定的数据项。
  参 数:Name指出要检查的数据项的名称。
  返回值:如果该数据项存在返回True,否则返回False。

 
 
就是在注册表中,
找一个很不引人注意的地方,
起一个很不引人注意的健名,

写入自己胡乱定义的一此东西作为判断就可了。

如此,如此,这般,这般了。
 
给你一段例子
procedure TFrmAbout.WriteRegTotal; //將信息寫入注冊表
var
Regf:TRegistry;
begin
Regf:=TRegistry.Create;
Regf.RootKey:=HKEY_LOCAL_MACHINE;
RegF.OpenKey('SOFTWARE/MMV',True);
RegF.WriteFloat('MouseMove',LenPath);
RegF.WriteString('Unit',LenUnit);
RegF.CloseKey;
RegF.Free;
end;

procedure TFrmAbout.ReMoveReg; //移除注冊表
var
Regf:TRegistry;
begin
Regf:=TRegistry.Create;
Regf.RootKey:=HKEY_LOCAL_MACHINE;
Regf.OpenKey('SOFTWARE',false);
Regf.DeleteKey('MMV');
Regf.CloseKey;
RegF.OpenKey('SOFTWARE/Microsoft/Windows/CurrentVersion/Run',false);
Regf.DeleteValue('MouseMove');
Regf.CloseKey;
Regf.Free;
end;
 
我也正在做类似的事,但不能实现过期后再谢了再install时install报错,但能运行是报错,方法很笨,不准笑

我是这样子的,在currentversion下写了一个值(REG_WORD),每运行一次+1,到了我设的限定值
时,一时弹出注册窗口,并同时在偏僻的地方再写一个值,标志比用户曾超期
 
不要写在注册表的local_machine里
 
写到硬盘分区表最好!!不过很危险
写到注册表可以用注册表监控软件查到
 
这.......
我以前装过sthvcd,记得第一次过期后,我先卸载后安装,发现不行,后来
索性把c:/格式化,重装win98,结果还是不行,
多谢楼上各位,但写注册表的方法似乎太容易被“解决”了的说。
 
再等等,希望继续讨论,以上各位至少每人50分。
chenlh,luyear:有详细的资料吗?
 
to g622:

sthvcd确实也是写注册表呢,我改过的,没问题。
我是说的5.X的试用版,其它版本就没试过了,
我想一定也是这样的。
 
利用Int 13h可以直接操作硬盘上一块保留空间,
在硬盘的最后,按照LBA的方式,这块空间是不
会被别的应用使用的,可以在这块空间做一些标
志,去年的《电脑编程与维护技巧》上有文章,
您可以查一下,
至于利用Port 70&71在CMOS中写纪录,也很安
全,况且CMOS有一部分也确实是保留的,但听
说有些主板厂家利用这些保留的字节纪录自己的
信息,因此为了兼容,还是不用为妙
 
找到了位置,可是没文章可下载 :)

操作系统以外的硬盘空间利用DOS/WINDOWS9X的隐含扇区保护数据

12期35页
 
这个问题就先结束了。因为大家说的基本都是写注册表,所以500分平分。
请到:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=476849
sonie:50sportsman:50zhangkan:50程云:50苦瓜:50热血:50
crystal:能找到全文吗?
 
Sachow:请到
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=476851
 
to g662:
请留下通信地址,我可以复印了寄给你
 
后退
顶部