通常注册表的实现有很多种,这个是基于windows.h 的实现的一种注册表的实现。
源码// Regedit.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include//#include "stdafx.h" #include"windows.h" #include #define SIZE 256 int main() { HKEY hKEY; LPCTSTR data_Set = _T("Baiduyunguanjia\shell\open\command");//主键值 long ret0, ret1;//返回值 DWORD dataType;//数据类型 DWORD dataSize;//数据长度 char data[SIZE] = { 0 }; char biosVendor[SIZE]; memset(biosVendor, 0, SIZE); // 这里故意设置成A的,只是为了给大家提个醒。 ret0 = RegOpenKeyEx(HKEY_CLASSES_ROOT, data_Set, NULL, KEY_READ, &hKEY);//打开主键 if (ret0 != ERROR_SUCCESS) //如果无法打开hKEY,则中止程序的执行 { printf("不能打开注册表 !!n"); return 1; } ret1 = RegQueryValueEx(hKEY, NULL, NULL, &dataType, (LPBYTE)data, &dataSize);//获取数据 if (ret1 != ERROR_SUCCESS) //如果无法打开hKEY,则中止程序的执行 { printf("无法打开 !!n"); return 1; } printf("Data 字节:%dn", dataType); printf("Data 长度:%dn", dataSize); printf("数据: "); // 为毛这里分每个字节来打印,而不是直接puts什么的。 // 因为键值数据每个字符中间都是0x00 = “/0”,so puts只能输出一个字符。我也是调试才看到的,还以为是API参数错误呢。 for (unsigned i = 0, j = 0; i < dataSize; i += 2, j++) { printf("%c", data[i]); memcpy(biosVendor + j, data + i, 1); } printf("n"); //printf("路径信息: %sn", biosVendor); // 你看明白我是怎么看主机BIOS固件厂商的了吧 unsigned j = 0; for (unsigned i = SIZE; i > 0; i--) { if ('\' == biosVendor[i]) { j = i; break; } } char result[SIZE] = { 0 }; for (unsigned i = 0; i < j; i++) { result[i] = biosVendor[i]; } printf("路径信息: %sn", result); // 你看明白我是怎么看主机BIOS固件厂商的了吧 RegCloseKey(hKEY); // 程序结束前要关闭已经打开的 hKEY。 system("pause"); //std::cout << "Hello World!n"; }



