wince 注册表中修改MAC地址

来源:互联网 发布:mac dock透明 编辑:程序博客网 时间:2024/05/16 14:17

WINCE注册表中修改MAC地址

 

我遇到的问题是读出注册表中的MAC地址(如:00037f8ec46f),显示在界面上(如:

00:03:7f:8e:c4:6f);修改注册表,给用户提供个输入窗口(假如用户输入:00:03:7f:8e:c4:7c;

我第一步读取注册表:

nt i,j,p;

CString mac_jie;

CString str_tmp;

char mac[6][6]={0};

char mac_str[30];

UINT mac_adderr =30;

if(S_OK!=RegistryGetString(HKEY_LOCAL_MACHINE, 

TEXT("Comm\\AR6K_SD1\\Parms"),

TEXT("NetworkAddress"),

(LPTSTR)mac_str , mac_adderr))

{

m_now_mac.SetWindowText(L" 获取MAC地址失败! ");

}

读出来我就纳闷了,是个多字节字符串,怎么搞都搞不定,最后想了个不专业的方法(我不是做界面的对VC++了解不多),如你有跟好的方法,请指点(邮箱1124427436@qq.com);

p=0;

for(i=0;i<6; i++)

{

for(j=0; j<4; j++)

{

mac[i][j]=mac_str[p];

p++;

}

}

for(i=0;i<6;i++)

{

if(i==5)

str_tmp.Format(L"%s",mac[i]);

else 

str_tmp.Format(L"%s:",mac[i]);

mac_jie += str_tmp;

}

m_now_mac.SetWindowText(mac_jie);

我的办法是把这个很长的字符分成6份,没份4个字节,然后每份转化成宽字符,这样就可以在其后加入宽字符的 L”:” 了,我就这么搞定了,

到用户那去取又遇到了同样的问题:

Cxyh_wifiMAC_setDlg *p = (Cxyh_wifiMAC_setDlg *)lpParm;

CString mac_jie;

int i,j,p1;

//char mac[30]={0};

char str_buf[50]={0};

p->m_genggai_mac.GetWindowText(mac_jie);

memcpy(str_buf,mac_jie,2*mac_jie.GetLength());

//mac_jie.Format(L"%s",str_buf);

//p->m_now_mac.SetWindowText(mac_jie);

CString mac_temp[25]={0};

char temp[25][4]={0};

CString mac;

p1=0;

for(i=0; i<25;i++)

{

for(j=0; j<2 ;j++)

{

temp[i][j]=str_buf[p1++];

}

}

 

for(i=0; i<25; i++)

{

mac_temp[i].Format(L"%s",temp[i]);

}

 

p1=0;

for(i=0; i<25; i++)

{

if(mac_temp[i]==L"\0")

break;

if(p1==2)

{

if(mac_temp[i]!=L":")

{

p->MessageBox(L"输入不符合规范!");

kk=0;

return 0;

}

p1=0;

}

else

{

p1++;

if(mac_temp[i]>=L"0" && mac_temp[i]<=L"9")

{

mac+=mac_temp[i];

continue;

}

else if(mac_temp[i]>=L"A" && mac_temp[i]<=L"F")

{

mac+=mac_temp[i];

continue;

}

else if(mac_temp[i]>=L"a" && mac_temp[i]<=L"f")

{

mac+=mac_temp[i];

continue;

}

else

{

p->MessageBox(L"输入不符合规范!");

kk=0;

return 0;

}

}

}

if(mac.GetLength()!=12)

{

p->MessageBox(L"输入不符合规范!");

kk=0;

return 0;

}

//p->m_now_mac.SetWindowText(mac);

if(S_OK != RegistrySetString(HKEY_LOCAL_MACHINETEXT("Comm\\AR6K_SD1\\Parms"),TEXT("NetworkAddress"),mac))

{

p->MessageBox(L"修改MAC地址失败!");

kk = 0;

}

//从新启wifi动模块,这一步可要可不要

p->m_now_mac.SetWindowText(L"Please waitting ....");

Sleep(1000);

int res;

res = restartwifi();

if(!res)

{

p->MessageBox(L"重启wifi模块失败!");

kk=0;

return -1;

}

//重新获取MAC地址

char mac_str[30];

CString mac_jie1;

CString str_tmp;

char mac_new[6][6]={0};

//char mac_str2[30];

UINT mac_adderr =30;

if(S_OK!=RegistryGetString(HKEY_LOCAL_MACHINETEXT("Comm\\AR6K_SD1\\Parms"),TEXT("NetworkAddress"),(LPTSTR)mac_str , mac_adderr))

{

p->m_now_mac.SetWindowText(L获取MAC地址失败! ");

}

 

p1=0;

for(i=0;i<6; i++)

{

for(j=0; j<4; j++)

{

mac_new[i][j]=mac_str[p1];

p1++;

}

}

 

for(i=0;i<6;i++)

{

if(i==5)

str_tmp.Format(L"%s",mac_new[i]);

else 

str_tmp.Format(L"%s:",mac_new[i]);

mac_jie1 += str_tmp;

}

p->m_now_mac.SetWindowText(mac_jie1);

kk =0;

p->MessageBox(L"MAC修改成功,请从新启动设备!");

 

后面的前面的解决方案一样。

 

原创粉丝点击