首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

BCB怎么实现软件只需注册一次就无使用限制

2012-05-24 
BCB如何实现软件只需注册一次就无使用限制如题,现在写了个程序,每次打开都要重新注册,int num0TRegistry

BCB如何实现软件只需注册一次就无使用限制
如题,现在写了个程序,每次打开都要重新注册,
int num=0;
  TRegistry *Registry = new TRegistry; //创建注册表堆对象指针
  Registry->RootKey = HKEY_USERS; //定位注册表根键
  if(!Registry->OpenKey(".DEFAULT\\Logon\\Records8", false))
  //if((Registry->OpenKey(".DEFAULT\\Logon\\Records7",false))==false)
  { //如果打开主键失败
  MessageBox(NULL," 感谢第一次使用本软件 !."," 欢迎 !",IDOK);
  Registry->CreateKey(".DEFAULT\\Logon\\Records8"); //创建主键
  if(!(Registry->OpenKey(".DEFAULT\\Logon\\Records8", false)))
  //return 0;
  ShowMessage("123");

  else
  {
  /*TRegistry *Reg = new TRegistry; // ①
  Reg->RootKey = HKEY_LOCAL_MACHINE;
  Reg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",false);
  Reg->WriteString("Logon",Application->ExeName); //在注册表中注册本程序
  Reg->CloseKey();
  delete Reg;
  Application->MessageBox("登录程序注册成功!","结果",MB_OK); // ② */

  // if(!(Registry->OpenKey(".DEFAULT\\Logon\\Records", true)))
  // {
  Registry->WriteInteger("开机次数",num);
  Registry->WriteString("程序注册时间",Date()+Time());
  //return 0;
  }
  }
  else
  {
  num = Registry->ReadInteger("开机次数"); // ③
  if(num>=5)
  {
  Application->MessageBox("本程序已经使用超过一定次数次,将要退出!!", "警告:", MB_OK);
  //Application-> Terminate();
  }
  Registry->WriteInteger("开机次数",num+1); //记录运行次数
  Registry->WriteString("第"+AnsiString(num+1)+"次开机",Date()+Time()); //记录运行时间
  }
  Registry->CloseKey();
  delete Registry;
}
但是需要注册一次后就不用再注册且无使用限制,该如何改呢

[解决办法]
使用注册表是一个办法,同样你可以考虑注册文件的办法,在你的程序中使用一些算法,将机器的一些特征码,例如网卡MAC地址作为算法的一部分,生成一个key文件,每次你都去读取这个key文件来解析是否具有使用权限
[解决办法]
一般我的做法是:第一次运行后读硬盘序列号,然后加密后存注册表中。以后每次运行时看看注册表中的这一项与硬盘序列号是否相同。

热点排行