【问题标题】:Check if the key already exists (RegOpenKey)检查密钥是否已经存在(RegOpenKey)
【发布时间】:2013-10-25 00:58:49
【问题描述】:

我这样做了:

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    HKEY CH;

    if(RegCreateKey(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&CH) != 0)
    {
        printf("Erro - RegCreateKey\n");
        system("PAUSE");
        return -1;
   }
    if(RegOpenKey(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&CH) != 0) // Abre a CH "Minha CH"
    {
        printf("Erro - RegOpenKey\n");
        system("PAUSE");
        return -1;
    }
    if(RegSetValueEx(CH,L"PROC",0,REG_SZ,(LPBYTE) L"C:\\pasta1\\pasta2\\txt.txt",200) != 0)
        printf("Erro - RegSetValue\n");
    RegCloseKey(CH);
    printf("\nsucesso !\n");
    system("PAUSE");
    return 0;
     system("PAUSE");
}

现在我想做:

 if(key already exist) {
            //don't make nothing 
} else
     Create key
      ... 

我需要做什么功能?因为如果没有,我将创建一个已经存在的密钥。如果我能避免那就太好了。

【问题讨论】:

  • 只需致电RegCreateKeyEx。如果它已经存在,它会打开密钥,如果不存在则创建它。问题解决了吗?
  • 但是 RegSetValueEx 呢?它会和 RegCreateKey 做同样的事情吗?
  • RegSetValueEx 会在不存在的情况下创建一个新值,或者覆盖现有值。
  • 好的,如果它没有害处,那么。 . .问题解决了。 . .

标签: c++ winapi registry


【解决方案1】:

使用RegCreateKeyEx。如果它已经存在,它会打开密钥,如果不存在则创建它。 lpdwDisposition 参数告诉您这两种效果中的哪一种实际发生了。例如:

DWORD disposition = 0;
RegCreateKeyEx(..., &disposition);
if (disposition == REG_CREATED_NEW_KEY) {
    /* new key was created */
} else {
    /* existing key was opened */
} 

【讨论】:

  • DWORD disposition = 0; RegCreateKeyEx(..., &amp;disposition); if (disposition == REG_CREATED_NEW_KEY) { /* new key was created */ } else { /* existing key was opened */ } 错误检查留给读者练习。
  • 那么使用 RegOpenKeyEx(...) 有什么意义呢?难道只使用 RegCreateKeyEx(...) 就不需要编写额外的验证代码了吗?
  • @funa68:当你想打开一个现有的密钥时,你会使用RegOpenKeyEx,但如果它不存在就不想创建一个新的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 2012-05-13
  • 1970-01-01
相关资源
最近更新 更多