user-0 提问: 求大神帮我看下为什么用C语言创建不了注册表

回复:
user: user-0
content: 还有一个问题就是为什么我在明明括号都够了，还是提示少了个括号，所以我在最后的地方加了一个花括号，就没提示了。请问这是什么情况？

user: user-0
content: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h> int main() { 	HKEY hKEY; 	int i,j; 	char data_set[]="SOFTWARE\\news";   	DWORD dataType;   	DWORD dataSize;  	char content[]="abcde"; 	char data[100] = {0};   	char News[100]; 	memset(News, 0x41, 100);    	if(RegOpenKeyEx(HKEY_CURRENT_USER,TEXT("Software\\news"), NULL, KEY_READ, &hKEY) != ERROR_SUCCESS)        //如果无法打开hKEY,则中止程序的执行   	{   		 if(RegCreateKey(HKEY_CURRENT_USER,TEXT("Software\\news"),&hKEY)!=ERROR_SUCCESS) 		 { 			printf("创建注册表失败！\n"); 			system("pause"); 			exit(1); 		 } 			if (RegSetValueEx(hKEY,TEXT("news"), 0, REG_SZ,(LPBYTE)content, strlen(content)) != ERROR_SUCCESS) { 			{ 				printf("错误：无法设置有关的注册表信息"); 			} 			RegCloseKey(hKEY); 	}   	if(RegOpenKeyEx(HKEY_CURRENT_USER,TEXT("Software\\news"), NULL, KEY_READ, &hKEY) == ERROR_SUCCESS) 	{ 		if((RegQueryValueEx(hKEY, TEXT("news"), NULL, &dataType, (LPBYTE)data, &dataSize ))!= ERROR_SUCCESS)       //如果无法打开hKEY,则中止程序的执行   		{   			printf("Error #RegQueryValueEx !!\n");     		}   	} 	printf("Data Type:%d\n", dataType);   	printf("Data Size:%d\n", dataSize);   	printf("data: ");      	// 因为键值数据每个字符中间都是0x00 = “/0”，so  puts只能输出一个字符。我也是调试才看到的，还以为是API参数错误呢。   	for ( i = 0, j = 0; i < dataSize; i += 2, j++)   	{   		printf("%c", data[i]);   		memcpy(News + j, data + i, 1);   	}   	printf("\n");      	printf("News: %s\n", News);  //   看看News的值      	RegCloseKey(hKEY);        // 程序结束前要关闭已经打开的 hKEY。   	system("pause");   	return 0;   	}  这是我更改的代码 运行后的情况    运行第一次可以显示，但运行后吗，再运行就不能再显示，一直闪退

user: user-0
content: 引用 6 楼 paschen 的回复:[quote=引用 5 楼 A5435431941 的回复:] 创建的问题解决的，有那个新键了，但键值却读不进，写进去的是乱码。   if(RegCreateKey(HKEY_CURRENT_USER,TEXT("Software\\news"),&hKEY)!=ERROR_SUCCESS) 		 { 			printf("创建注册表失败！\n"); 			system("pause"); 			exit(1); 		 } 			if (RegSetValueEx(hKEY,TEXT("news"), 0, REG_SZ, "abcde", 6) != ERROR_SUCCESS) { 			{ 				printf("错误：无法设置有关的注册表信息"); 			} 			RegCloseKey(hKEY);   这样写对吗？这些参数。  TEXT("abcde")  ?[/quote]  引用 6 楼 paschen 的回复:[quote=引用 5 楼 A5435431941 的回复:] 创建的问题解决的，有那个新键了，但键值却读不进，写进去的是乱码。   if(RegCreateKey(HKEY_CURRENT_USER,TEXT("Software\\news"),&hKEY)!=ERROR_SUCCESS) 		 { 			printf("创建注册表失败！\n"); 			system("pause"); 			exit(1); 		 } 			if (RegSetValueEx(hKEY,TEXT("news"), 0, REG_SZ, "abcde", 6) != ERROR_SUCCESS) { 			{ 				printf("错误：无法设置有关的注册表信息"); 			} 			RegCloseKey(hKEY);   这样写对吗？这些参数。  TEXT("abcde")  ?[/quote]   #include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h> int main() { 	HKEY hKEY; 	int i,j; 	char data_set[]="SOFTWARE\\news";   	DWORD dataType;   	DWORD dataSize;  	char content[]="abcde"; 	char data[100] = {0};   	char News[100]; 	memset(News, 0x41, 100);    	if(RegOpenKeyEx(HKEY_CURRENT_USER,TEXT("Software\\news"), NULL, KEY_READ, &hKEY) != ERROR_SUCCESS)        //如果无法打开hKEY,则中止程序的执行   	{   		 if(RegCreateKey(HKEY_CURRENT_USER,TEXT("Software\\news"),&hKEY)!=ERROR_SUCCESS) 		 { 			printf("创建注册表失败！\n"); 			system("pause"); 			exit(1); 		 } 			if (RegSetValueEx(hKEY,TEXT("news"), 0, REG_SZ,(LPBYTE)content, strlen(content)) != ERROR_SUCCESS) { 			{ 				printf("错误：无法设置有关的注册表信息"); 			} 			RegCloseKey(hKEY); 	}   	if(RegOpenKeyEx(HKEY_CURRENT_USER,TEXT("Software\\news"), NULL, KEY_READ, &hKEY) == ERROR_SUCCESS) 	{ 		if((RegQueryValueEx(hKEY, TEXT("news"), NULL, &dataType, (LPBYTE)data, &dataSize ))!= ERROR_SUCCESS)       //如果无法打开hKEY,则中止程序的执行   		{   			printf("Error #RegQueryValueEx !!\n");     		}   	} 	printf("Data Type:%d\n", dataType);   	printf("Data Size:%d\n", dataSize);   	printf("data: ");      	// 因为键值数据每个字符中间都是0x00 = “/0”，so  puts只能输出一个字符。我也是调试才看到的，还以为是API参数错误呢。   	for ( i = 0, j = 0; i < dataSize; i += 2, j++)   	{   		printf("%c", data[i]);   		memcpy(News + j, data + i, 1);   	}   	printf("\n");      	printf("News: %s\n", News);  //   看看News的值      	RegCloseKey(hKEY);        // 程序结束前要关闭已经打开的 hKEY。   	system("pause");   	return 0;   	}  这是我更改的代码 运行后的情况   运行第一次可以显示，但运行后吗，再运行就不能再显示，一直闪退

user: user-1
content: 引用 5 楼 A5435431941 的回复:创建的问题解决的，有那个新键了，但键值却读不进，写进去的是乱码。   if(RegCreateKey(HKEY_CURRENT_USER,TEXT("Software\\news"),&hKEY)!=ERROR_SUCCESS) 		 { 			printf("创建注册表失败！\n"); 			system("pause"); 			exit(1); 		 } 			if (RegSetValueEx(hKEY,TEXT("news"), 0, REG_SZ, "abcde", 6) != ERROR_SUCCESS) { 			{ 				printf("错误：无法设置有关的注册表信息"); 			} 			RegCloseKey(hKEY);   这样写对吗？这些参数。  TEXT("abcde")  ?

user: user-0
content: 创建的问题解决的，有那个新键了，但键值却读不进，写进去的是乱码。   if(RegCreateKey(HKEY_CURRENT_USER,TEXT("Software\\news"),&hKEY)!=ERROR_SUCCESS) 		 { 			printf("创建注册表失败！\n"); 			system("pause"); 			exit(1); 		 } 			if (RegSetValueEx(hKEY,TEXT("news"), 0, REG_SZ, "abcde", 6) != ERROR_SUCCESS) { 			{ 				printf("错误：无法设置有关的注册表信息"); 			} 			RegCloseKey(hKEY);   这样写对吗？这些参数。

user: user-0
content: 引用 2 楼 Bokutake 的回复:要想编辑HKLM部分的注册表的话，你的程序应该以管理员身份运行才可以吧。 右键单击你的.exe文件，选以管理员身份运行。 另外你要确定SOFTWARE\\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\news这个键真的存在。 否则你以READ方式打开会失败的，那种情况下，你需要 以READ/WRITE方式打开SOFTWARE\\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\ 判断是否有news，否则在下面创建news。  在哪个表下不用管理员身份就可运行？

user: user-2
content: Unicode 程序嘛？Unicode 的需要用 wchat_t 。  VS 写 windows 程序的话，可以直接用 TCHAR ，用 TEXT("string") 表示字符串常量。

user: user-3
content: 要想编辑HKLM部分的注册表的话，你的程序应该以管理员身份运行才可以吧。 右键单击你的.exe文件，选以管理员身份运行。 另外你要确定SOFTWARE\\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\news这个键真的存在。 否则你以READ方式打开会失败的，那种情况下，你需要 以READ/WRITE方式打开SOFTWARE\\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\ 判断是否有news，否则在下面创建news。

user: user-0
content: 我一直显示创建注册表失败，

user: user-2
content: 引用 9 楼 A5435431941 的回复:还有一个问题就是为什么我在明明括号都够了，还是提示少了个括号，所以我在最后的地方加了一个花括号，就没提示了。请问这是什么情况？  在括号匹配的问题上，一般编译器的结果比你自己用眼看的结果要准确。

user: user-4
content: 引用 9 楼 A5435431941 的回复:还有一个问题就是为什么我在明明括号都够了，还是提示少了个括号，所以我在最后的地方加了一个花括号，就没提示了。请问这是什么情况？ 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。