Windows操作注册表API简单例子

//Windows操作注册表API简单例子

//操作注册表主要包括下面几个系统API
//1、RegOpenKeyEx    打开注册表项
//2、RegCloseKey     关闭注册表项
//3、RegCreateKeyEx  创建注册表项
//4、RegDeleteKey    删除注册表项
//5、RegQueryValueEx 读取注册表键值
//6、RegSetValueEx   写入注册表键值

// 测试代码:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int main(int argc, char *argv[])
{
	LONG lRet = 0;
	HKEY hKeyProg = NULL;
	char szProcessKey[256];
	memset(szProcessKey, 0, sizeof(szProcessKey));

	// 获取进程ID
	DWORD dwProcessId = ::GetCurrentProcessId();
	// 设置进程项路径
	_snprintf_s(szProcessKey, sizeof(szProcessKey), "test\\%u", dwProcessId);
	// 打开注册表进程项
	lRet = ::RegOpenKeyEx(HKEY_CLASSES_ROOT, szProcessKey, 0, KEY_ALL_ACCESS, &hKeyProg);
	if(lRet != ERROR_SUCCESS)
	{
		DWORD dwDisposition = 0;
		// 打开失败时,创建注册表进程项
		lRet = ::RegCreateKeyEx(HKEY_CLASSES_ROOT, szProcessKey, 
			0, NULL, 0, KEY_ALL_ACCESS, NULL, &hKeyProg, &dwDisposition);
		if(lRet != ERROR_SUCCESS)
		{
			printf("RegCreateKeyEx error:%d. key:%s\n", lRet, szProcessKey);
			return -1;
		}
	}
	// 取当前时间
	char szTime[32];
	time_t timeNow = 0;
	time(&timeNow);
	struct tm tmNow;
	errno_t err = 0;
	// 取系统时区对应的当地时间
	err = localtime_s(&tmNow, &timeNow);
	if(err == 0)
	{
		memset(szTime, 0, sizeof(szTime));
		_snprintf_s(szTime, sizeof(szTime), "%04d-%02d-%02d %02d:%02d:%02d", 
			tmNow.tm_year + 1900, tmNow.tm_mon + 1, tmNow.tm_mday, 
			tmNow.tm_hour, tmNow.tm_min, tmNow.tm_sec);
		// 写入注册表键值:时间
		lRet = ::RegSetValueEx(hKeyProg, "Time", 0, REG_SZ, (unsigned char *)szTime, strlen(szTime));
		if(lRet != ERROR_SUCCESS)
		{
			printf("RegSetValueEx error:%d.\n", lRet);
		}
	}

	// 读取注册表键值:时间
	DWORD dwType = REG_SZ; // 字符串值类型
	DWORD dwLen = sizeof(szTime);
	memset(szTime, 0, sizeof(szTime));
	lRet = ::RegQueryValueEx(hKeyProg, "Time", 0, &dwType, (LPBYTE)szTime, &dwLen);
	if(lRet != ERROR_SUCCESS)
	{
		printf("RegQueryValueEx error:%d.\n", lRet);
	}
	printf("time:%s\n", szTime);

	// 关闭注册表进程项
	lRet = ::RegCloseKey(hKeyProg);
	if(lRet != ERROR_SUCCESS)
	{
		printf("RegCloseKey error:%d. key:%s\n", lRet, szProcessKey);
	}
	printf("----------create key and write string----------\n");
	Sleep(5000);

	HKEY hKeyTest = NULL;
	// 打开注册表test项
	lRet = ::RegOpenKeyEx(HKEY_CLASSES_ROOT, "test", 0, KEY_ALL_ACCESS, &hKeyTest);
	if(lRet != ERROR_SUCCESS)
	{
		printf("RegOpenKeyEx error:%d. key:test\n", lRet);
		return -1;
	}
	memset(szProcessKey, 0, sizeof(szProcessKey));
	_snprintf_s(szProcessKey, sizeof(szProcessKey), "%u", dwProcessId);
	// 删除注册表进程项(注意删除项的下面不能再有其他项,否则不能删除)
	lRet = ::RegDeleteKey(hKeyTest, (const char *)szProcessKey);
	if(lRet != ERROR_SUCCESS)
	{
		printf("RegDeleteKey error:%d. key:%s.\n", lRet, szProcessKey);
	}
	// 关闭注册表test项
	lRet = ::RegCloseKey(hKeyTest);
	if(lRet != ERROR_SUCCESS)
	{
		printf("RegCloseKey error:%d. key:test.\n", lRet);
	}
	printf("----------delete key----------\n");
	system("PAUSE");
	return 0;
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值