注册 登录
编程论坛 C++教室

C++读取注册表中的mac地址,总是读不对,求指导!

九天云中龙 发布于 2016-04-20 16:55, 4985 次点击
各位大神好:
    小弟想用C++读取注册表中的mac地址,在网上找了一个范例之后修改了一下,但是,每次读出来的mac地址都是不同的,并且,此mac地址与注册表中的键值也一直不相同,求大神指导一下,具体代码如下:
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
    HKEY hOpen;
    char key[255] = "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\0000";
    char name[100] = "DriverDateData";
    string buf[255];
    DWORD size;
    if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, key, 0, KEY_READ, &hOpen))
    {
        RegQueryValueEx(hOpen, name, NULL, NULL, (BYTE*)buf, &size);
        cout << buf << endl;
    }
    RegCloseKey(hOpen);
    Sleep(300000);
    return 0;
}
5 回复
#2
rjsp2016-04-21 08:56
第一个问题,string buf[255]; 这是什么?我猜你想要的是 char buf[255] 吧
第二个问题,RegQueryValueEx成功了没有?你的看其返回值
#3
九天云中龙2016-04-25 09:20
回复 2楼 rjsp
1.这里用string是OK的,用char反而没有值
2.函数有运行成功,数据读到了,只是读取的不对而已。
#4
alice_usnet2016-04-25 10:09
这样
程序代码:
DWORD dwtype=REG_SZ;  //读取的数据类型
BYTE data[MAX_PATH];
SecureZeroMemory(data,MAX_PATH);
...
RegQueryValueEx(hOpen, name, NULL, &dwtype, (LPBYTE)data, &size);
#5
rjsp2016-04-25 11:13
以下是引用九天云中龙在2016-4-25 09:20:06的发言:

1.这里用string是OK的,用char反而没有值
2.函数有运行成功,数据读到了,只是读取的不对而已。
听不懂,我帮你写一个吧

程序代码:
#include <windows.h>
#include <iostream>
#include <iomanip>
using namespace std;

int main( void )
{
    const char* key = "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\0000";
    const char* value = "DriverDateData";

    HKEY hOpen;
    if( ERROR_SUCCESS == RegOpenKeyExA(HKEY_LOCAL_MACHINE,key,0,KEY_READ,&hOpen) )
    {
        BYTE buf[255];
        DWORD len = _countof(buf);
        if( ERROR_SUCCESS == RegQueryValueExA(hOpen,value,NULL,NULL,buf,&len) )
        {
            for( DWORD i=0; i!=len; ++i )
                cout << ' ' << setfill('0') << setw(2) << hex << (unsigned)buf[i];
        }

        RegCloseKey( hOpen );
    }
    return 0;
}

#6
wmf20142016-04-25 11:44
回复 5楼 rjsp
获取的和ipconfig得到的mac地址不同,mac地址只有6个字节,我改用下述代码能拿到本机的mac,不知道通用不:
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
    HKEY hOpen;
    char key[255] = "Software\\SystemSres";
    char name[100] = "mac";
    char  buf[255];
    DWORD size;
    if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, key, 0, KEY_READ, &hOpen))
    {
        RegQueryValueEx(hOpen, name, NULL, NULL, (BYTE*)buf, &size);
        cout << buf << endl;
    }
    RegCloseKey(hOpen);
    return 0;
}
1