DWORD dwDisposition; HKEY hNewKey=NULL; LONG  nRet=RegCreateKeyEx(
HKEY_LOCAL_MACHINE, "SOFTWARE\\China Mobile\\Fetion\\test",
0,
NULL, REG_OPTION_NON_VOLATILE, NULL, NULL,   &hNewKey,    &dwDisposition
)  ; if(nRet!= ERROR_SUCCESS)
{
printf("打开失败\n");
int xx=GetLastError(); return -1;
} RegCloseKey(hNewKey)  ;权限是管理员,平台是 win7+vs2008

解决方案 »

  1.   

    ONG  nRet=RegCreateKeyEx(
            HKEY_LOCAL_MACHINE,            "SOFTWARE\\China Mobile\\Fetion\\test",
            0,
            NULL,        REG_OPTION_NON_VOLATILE,        KEY_WRITE|KEY_READ,//////NULL        NULL,          &hNewKey,           &dwDisposition
            )  ;
      

  2.   


    成功了问个问题啊,这段代码只能搞定 创建一个 叫test的子项,如果想给子项 test 一个值该怎么办啊?查了msdn,说不能做到。如果不能做到,那么我在创建的时候,就会默认有个叫 “默认”的子项,其类型是REG_SZ.能不能再创建的时候,对其指定类型,或者说对其命名?
      

  3.   

    这个俺就不清楚了
    你自己用RegSetValueEx创建一个键值不就好了,干嘛非要用默认的那个
      

  4.   

    我要死了,  如果发现子项存在,就失败, 子项不存在,虽然成功,但是regsetvalueex失败,是怎么回事啊我上代码啊:DWORD dwDisposition; HKEY hNewKey=NULL; LONG  nRet=RegCreateKeyEx(
    HKEY_LOCAL_MACHINE, "SOFTWARE\\test",
    0,
    NULL, //REG_DWORD REG_OPTION_NON_VOLATILE, NULL, NULL, &hNewKey, &dwDisposition
    )  ; if(nRet!= ERROR_SUCCESS)
    {
    if(dwDisposition==REG_OPENED_EXISTING_KEY)
    {
    printf("存在\n");
    ////regopenex来打开
    //nRet=RegOpenKeyEx(
    // HKEY_LOCAL_MACHINE,
    // "SOFTWARE\\test",
    // 0,
    // NULL,
    // &hNewKey  );
    //if(nRet!=ERROR_SUCCESS)
    //{
    // printf("再次打开失败\n");
    // return -1;
    //}
    }
    else
    printf(" 其他错误\n");
    }

    const BYTE mydata=2;
    nRet=  RegSetValueEx(
     hNewKey,
     "nihao",
     0,
     REG_DWORD,
     &mydata,
     sizeof(BYTE)
     );if(nRet!= ERROR_SUCCESS)
    {
    printf("error\n");
    }
    RegCloseKey(hNewKey)  ;
      

  5.   


    RegSetValueEx的用法师查询msdn的, 没有错误啊
      

  6.   

    问题已经发现了,是函数指定的权限问题啊LONG  nRet=RegCreateKeyEx(
    HKEY_LOCAL_MACHINE, "SOFTWARE\\test",
    0,
    NULL, //REG_DWORD REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE,

    NULL, &hNewKey, &dwDisposition
    )  ;这才对啊
     
    现在剩下了一个最后问题:
    nRet=  RegSetValueEx(
     hNewKey,
     "nihao",
     0,
     REG_DWORD,
     &mydata,
     sizeof(BYTE)
     );虽然已经已经设置了值, 但是 在注册表中提示 DWORD类型不对
      

  7.   

    mydata是什么类型?
    如果是DWORD,后面的参数应该是sizeof(DWORD)吧
      

  8.   

     多谢阁下 
    可以再追问一个问题吗, 太麻烦你了啊DWORD dwDisposition; HKEY hNewKey=NULL; LONG  nRet=RegCreateKeyEx(
    HKEY_LOCAL_MACHINE, "SOFTWARE\\test",
    0,
    NULL, //REG_DWORD REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE,
    NULL, &hNewKey, &dwDisposition
    )  ; if(nRet!= ERROR_SUCCESS)
    {
    printf(" 其他错误\n");
    return 0; }

     BYTE mydata[4];memset(mydata,0,4);mydata[0]=1;
    nRet=  RegSetValueEx(
     hNewKey,
     "nihao",
     0,
     REG_DWORD,
     mydata,
     sizeof(DWORD)
     );if(nRet!= ERROR_SUCCESS)
    {
    printf("error\n");
    } char buf[50]; memset(buf,0,50);
    RegEnumKey(hNewKey, 1, buf, 50);   //buf的值依然是空的printf("%s",buf);
    RegCloseKey(hNewKey)  ;
    所有函数都对了,除了regEnumKey外, 这个函数拿不到值啊,我已经看了注册表了, 里面是由值的。
      

  9.   

    dwIndex [in] 
    The index of the subkey of hKey to be retrieved. This value should be zero for the first call to the RegEnumKey function and then incremented for subsequent calls. Because subkeys are not ordered, any new subkey will have an arbitrary index. This means that the function may return subkeys in any order.