工控编程吧
标题:
364上位机VC MFC利用网卡MAC生成软件注册码
[打印本页]
作者:
qq263946146
时间:
2016-9-18 20:41
标题:
364上位机VC MFC利用网卡MAC生成软件注册码
(, 下载次数: 0)
上传
点击文件名下载附件
利用网卡MAC生成软件注册码
功能展示
网卡的MAC地址如人的指纹,相同概率极低,我们就可以根据网卡的地址生成唯一的用于我们软件的注册码,当前例程就实现了这一功能,效果如图,点击<获取本机网卡MAC>可以获得本机的网卡地址并显示在编辑框中,点击<用MAC生成注册码>软件会用本机的MAC地址生成注册码,也显示在编辑框中;
要点提示
当前例程通过函数Netbios()获取网卡的MAC地址,要注意的是在使用此函数前得包含函数所在头文件及库文件,即包含以下两段代码#include "nb30.h“ #pragma comment(lib,"netapi32.lib")
网卡序列号例程将之分成3段,再将3段的字符转换其对应的整形数值,再经过加密算法生成另外的数值并转换为ASCII码显示出来作为注册码使用;
实现功能
1.新建基于对话框的应用程序
2.在主对话框中包含网卡操作函数所在头文件#include "nb30.h"
#pragma comment(lib,“netapi32.lib”)并依照界面添加编辑框IDC_EDIT1,IDC_EDIT2用于显示获得的网址,生成的注册码,再添加按钮《获取本机网卡MAC》《用MAC生成注册码》关联按钮的点击函数
void CGkbc8Dlg::OnGetmac()
{
NCB ncb;
LANA_ENUM lenum;
ADAPTER_STATUS state;
UCHAR ucReturnCode;
ncb.ncb_command=NCBENUM;
ncb.ncb_buffer=(UCHAR*)&lenum;
ncb.ncb_length=sizeof(lenum);
ucReturnCode=Netbios(&ncb);
if(lenum.length>=0)
{
int num=lenum.lana[0];
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command=NCBRESET;
ncb.ncb_lana_num=num;
ucReturnCode=Netbios(&ncb);
memset(&ncb,0,sizeof(ncb));
ncb.ncb_command=NCBASTAT;
ncb.ncb_lana_num=num;
ncb.ncb_buffer=(unsigned char *)&state;
ncb.ncb_length=sizeof(state);
strcpy( (char *)ncb.ncb_callname,"*" );
ucReturnCode=Netbios(&ncb);
CString strMac;
strMac.Format("%02X%02X-%02X%02X-%02X%02X\n",
state.adapter_address[0],
state.adapter_address[1],
state.adapter_address[2],
state.adapter_address[3],
state.adapter_address[4],
state.adapter_address[5]);
SetDlgItemText(IDC_EDIT1,strMac);
}
else
MessageBox("未检测到网卡");
}
void CGkbc8Dlg::OnGenerate()
{
char base[64]={'d','c','a','b','h','g','e','f','l','k',
'i','j','p','o','m','n','t','s','q','r',
'x','w','u','v','b','a','y','z','f','e',
'c','d','j','i','g','h','n','m','k','l',
'r','q','o','p','v','u','s','t','z','y',
'j','t','o','v','w','m','q','x','p','f',
'w','x','d','c'};
CString code;
CString regcode,tmp;
GetDlgItemText(IDC_EDIT1,code);
code.MakeLower();
//<>
int num;
char temp;
for(int i=0;i<4;i++)
{
temp=code.GetAt(i);
if(temp>='a'&&temp<='f')
num=temp-'a'+10;
else
num=temp-'0';
tmp.Format("%c",base[num*4+i]);
regcode+=tmp;
}
for(i=0;i<4;i++)
{
temp=code.GetAt(i+5);
if(temp>='a'&&temp<='f')
num=temp-'a'+10;
else
num=temp-'0';
tmp.Format("%c",base[num*4+i]);
regcode+=tmp;
}
for(i=0;i<4;i++)
{
temp=code.GetAt(i+10);
if(temp>='a'&&temp<='f')
num=temp-'a'+10;
else
num=temp-'0';
tmp.Format("%c",base[num*4+i]);
regcode+=tmp;
}
regcode.MakeUpper();
SetDlgItemText(IDC_EDIT2,regcode);
}
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/b3c27883c0e4682fd862bb230d812f8e/0/0/w_19rswlap5l.swf-albumId=6296221109-tvId=6296221109-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件 [weixinlianxi]1[/weixinlianxi]
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4