操纵Windows注册表

时间:2015-02-12 15:26:04

标签: c++ c windows winapi

我希望每次我的程序都运行这个过程:

1-检查是否存在名为"foo"

的Windows注册表项

2-如果不存在则使用值10

创建

3-如果存在则递减其值

4-如果value == 0关闭程序

我知道我将使用这些功能,但我不知道如何使用它们:

RegCreateKeyA, RegSetValueExA

创建密钥的功能有效,但我无法设置值,也不知道如何做我需要的。

HKEY key;

RegCreateKeyA(HKEY_CURRENT_USER,"foo",&key);
RegOpenKeyExA(HKEY_CURRENT_USER,"foo", 0, KEY_ALL_ACCESS, &key);
RegSetValueExA(key,"bar",0,REG_DWORD,(LPBYTE)10,sizeof(10));

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

HKEY key;
DWORD disposition;

LONG lRet = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("foo"), 0, NULL, REG_OPTION_NON_VOLATILE, KEY_QUERY_VALUE | KEY_SET_VALUE, NULL, &key, &disposition);
if (lRet != 0)
{
    // error handling...
}
else
{
    DWORD value;

    if (disposition == REG_CREATED_NEW_KEY)
    {
        value = 10;

        lRet = RegSetValueEx(key, TEXT("bar"), 0, REG_DWORD, (LPBYTE)&value, sizeof(value));
        if (lRet != 0)
        {
            // error handling...
        }
    }
    else
    {
        DWORD size = sizeof(value);

        lRet = RegQueryValueEx(key, TEXT("bar"), NULL, NULL, (LPBYTE)&value, &size);
        if (lRet != 0)
        {
            // error handling...
        }
        else
        {
            if (value != 0)
            {
                --value;

                lRet = RegSetValueEx(key, TEXT("bar"), 0, REG_DWORD, (LPBYTE)&value, sizeof(value));
                if (lRet != 0)
                {
                    // error handling...
                }
            }

            if (value == 0)
            {
                // signal app to terminate...
            }
        }
    }

    RegCloseKey(key);
}