熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

在VC中怎樣實現軟件的注冊機制

2013-11-13 09:57:54  來源: .NET編程 

  現在網上下載的軟件大部分都需要注冊後才能使用其全部的功能也就是說當前大部分軟件都是建立了注冊機制的對於一個剛進入軟件行業的程序員來說一定非常想了解其中的注冊機制是怎樣實現的其實用VC開發軟件是可以很方便地加入注冊機制的 

    要實現軟件注冊功能首先需要知道實現注冊機制要涉及到的幾個問題如何加入注冊檢測判斷軟件是否注冊如何生成注冊碼如何保證一個用戶名只生成與之唯一對應的注冊碼在軟件不注冊情況下如何限制軟件功能的局限性對已經負費使用用戶而言不應造成使用不便 

    首先應該有一個生成注冊碼的算法以下是我簡單的一個生成為注冊碼的算法
//該函數返回一個CSTRING類型的位注冊碼入口參數為用戶名
CString GetRegPasswd(CString &DirName) 
{
//將用戶名換算成位注冊碼
long NumNumNum;

char sn[]={};
CString p;
int ilen;

Num=
Num=;
Num=;

len=int(strlen(DirName));
if(len!=)
{
for( i=;i<=len;i++)
{
//第一步算法
Num=(long(Num+(int(DirName[i])*i*i)*(i*sqrt(DirName[i])+)))%;
//第二步算法
Num=(Num*i+(long(pow((int)DirName[i])*i)))%;
//第三步算法
Num=(Num+(long)sqrt(Num))%;
}
//以下把三個算法結果分別生成個字符共有
for(i=;i<;i++)
sn[i]=(int)(Num++i*i*i)%;
for(i=;i<;i++)
sn[i]=(int)(Num++i*i*i)%;
for(i=;i<;i++)
sn[i]=(int)(Num++i*i*i)%;
sn[]=;
//以下循環把所有生成的字符轉換為AZaz
for(i=;i<;i++)
{
while((sn[i]<@#@# || sn[i]>@#@#) && (sn[i]<@#A@# || sn[i]>@#Z@#) &&(sn[i]<@#a@# || sn[i]>@#z@#) )
{
sn[i]=(sn[i]++*i)%;
}
}

  //賦值給一個CSTRING變量用做函數返回值
pFormat(%ssn);
}
return p;

//檢查軟件是否注冊的函數

BOOL GetRegFlag(void)
{
HKEY hKey = NULL;
BYTE i;

CString str;
strLoadString(IDS_REG_KEY);// IDS_REG_KEY為在注冊表中的子目錄字符串

if (RegCreateKey(HKEY_CURRENT_USER str &hKey) != ERROR_SUCCESS) return false;

DWORD cbA;
cbA=sizeof(int);
if( RegQueryValueEx(hKey SzMimaNULLNULL &i&cbA) != ERROR_SUCCESS)
return false;

BYTE j=i;
if(j==)//代表軟件已經注冊可以正常使用
{
RegCloseKey(hKey);
return true;
}
else
{
RegCloseKey(hKey);
return false;
}

return false;
};
//設置軟件已經注冊標志的函數

BOOL SetRegFlag(void)
{
HKEY hKey = NULL;
BYTE i;

CString str;
strLoadString(IDS_REG_KEY);// IDS_REG_KEY為在注冊表中的子目錄字符串

if (RegCreateKey(HKEY_CURRENT_USER str &hKey) != ERROR_SUCCESS) return false;

BYTE j=;//代表已經注冊
if(RegSetValueEx(hKey SzMima REG_BINARY &j) != ERROR_SUCCESS)
{
AfxMessageBox(設置注冊表數據失敗!);
return FALSE;
}
return false;
};
以上三個函數即可實現軟件注冊機制只需要在程序初始化的時候加入以下幾句代碼即可
BOOL bReg= GetRegFlag ();
if(!bReg)
{
//在此加入限制功能或者拒絕是使用的代碼
}
如果用戶注冊只需要加入以下代碼即可
//這是我的程序中的一個注冊界面輸入用戶名和注冊碼提交後檢驗注冊碼是否正確的代碼
void CRegEdit::OnBnClickedOk()

  {
if(!UpdateData()) return;//取得編輯框的內容並賦值到類變量中

m_RegUserTrimLeft();//m_RegUser是用戶名
m_RegUserTrimRight();
if(m_RegUserIsEmpty())
{
AfxMessageBox(用戶名不能為空請重新輸入);
GetDlgItem(IDC_REGUSER)>SetFocus();
return;
}
m_RegPasswdTrimLeft();m_RegPasswd是注冊碼
m_RegPasswdTrimRight();
if(m_RegPasswdIsEmpty())
{
AfxMessageBox(注冊碼不能為空請重新輸入);
GetDlgItem(IDC_REGPASSWD)>SetFocus();
return;
}
CString Passwd;
Passwd=GetRegPasswd(m_RegUser);//調用算法取得該用戶名的注冊碼
if(Passwd==m_RegPasswd)//與用戶輸入的注冊進行比較
{
SetRegFlag();//設置注冊標志
OnOK();
}
else
AfxMessageBox(注冊碼錯誤請重新輸入);
UpdateData(false);


    以上就是在VC中實現注冊機制的主要的代碼把他們加入您的程序即可程序代碼已在VC/WIN/WIN 環境中運行通過並在實際運用中得到驗證對已經注冊的用戶將不會有任何的障礙只需錄入注冊碼一次就可以不增加其日常使用的負擔而對非法用戶的使用而言取決於軟件的作者賦予他們的權利


From:http://tw.wingwit.com/Article/program/net/201311/12139.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.