回 帖 发 新 帖 刷新版面

主题:注册表的操作

我是一个初学者,看过有关注册表操作的文章,但说得都太多了,弄的我完全就不知道是怎么回事

我想问一下,我要在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft 新建一个字符串值应该怎么办,千万别复杂,要有注释和函数原型,拜托啦[em1]

回复列表 (共7个回复)

沙发

#include <windows.h>
#include <stdio.h>

int main()
{
    HKEY hKey;
    char szValueName[]="MyValueName";
    char MyData[]="MyStringData";
    LPSTR lpMsgBuf;

/*    LONG RegOpenKeyEx(

    HKEY hKey,    // handle of open key 
    LPCTSTR lpSubKey,    // address of name of subkey to open 
    DWORD ulOptions,    // reserved 
    REGSAM samDesired,    // security access mask 
    PHKEY phkResult     // address of handle of open key 
   );
*/
    //You first get the handle for the key you are going to open
    
    if(ERROR_SUCCESS!=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft",0,KEY_ALL_ACCESS,&hKey))
    {
        FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER ,NULL,GetLastError(),
                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(char*)&lpMsgBuf,
                        0,NULL);
        MessageBox(NULL,lpMsgBuf,"Get Last Error",MB_OK | MB_ICONEXCLAMATION);
        LocalFree(lpMsgBuf);
        return -1;
    }

/*    LONG RegSetValueEx(

    HKEY hKey,    // handle of key to set value for  
    LPCTSTR lpValueName,    // address of value to set 
    DWORD Reserved,    // reserved 
    DWORD dwType,    // flag for value type 
    CONST BYTE *lpData,    // address of value data 
    DWORD cbData     // size of value data 
   );
*/

    //Create a value name called "MyValueName", with the Data type of string and content of "MyStringData".
    if(ERROR_SUCCESS!=RegSetValueEx(hKey,szValueName,0,REG_SZ,(BYTE *)&MyData,strlen(MyData)+1))
    {
        FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,GetLastError(),
                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(char*)&lpMsgBuf,
                        0,NULL);
        MessageBox(NULL,lpMsgBuf,"Get Last Error",MB_OK | MB_ICONEXCLAMATION);
        LocalFree(lpMsgBuf);
        return -1;
    }

/*    LONG RegCloseKey(

    HKEY hKey     // handle of key to close  
   );
*/
    //You need to close the key after you opened anykey to release the source
    //Sorry that last time I forgot to do so.
    if(ERROR_SUCCESS!=RegCloseKey(hKey))
    {
        FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,GetLastError(),
                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(char*)&lpMsgBuf,
                        0,NULL);
        MessageBox(NULL,lpMsgBuf,"Get Last Error",MB_OK | MB_ICONEXCLAMATION);
        LocalFree(lpMsgBuf);
        return -1;
    }

    printf("Successfully add a value under HEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft!");
    
    return 0;
}

/* You only need RegOpenKeyEx, RegSetValueEx and RegClose to satisfy your requirement. */

板凳

很感谢你的回帖,你写得很好,但是有些地方我没有看懂

LPSTR lpMsgBuf;  有什么用吗,我没有打也行,是怎么回事

if(ERROR_SUCCESS!=RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft",0,KEY_ALL_ACCESS,&hKey))
中的  KEY_ALL_ACCESS  是访问什么方式

FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER ,NULL,GetLastError(),
                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(char*)&lpMsgBuf,
                        0,NULL);  有什么用,我在没有打这个也行,是可选的吗??

if(ERROR_SUCCESS!=RegSetValueEx(hKey,szValueName,0,REG_SZ,(BYTE *)&MyData,strlen(MyData)+1))  中的  strlen(MyData)+1  有什么用,能换成其他的吗,谢谢

我能加你的qq吗  我的qq是281179735,验证时麻烦说明一下是"注册表"

3 楼

你连代码都看不懂????
补基础....

4 楼

ALL_ACCESS 是完全访问模式,这时用户程序的级别得很高吧。还有其它的模式,如 KEY_QUERY_VALUE,KEY_SET_VALUE,KEY_WRITE,KEY_READ之类。

FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER ,NULL,GetLastError(),
                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(char*)&lpMsgBuf,
                        0,NULL);
以上是让系统基于错误ID,找出相应的错误信息,并把它放进系统为我们分配的内存中,最后通过我们传给它的指针的地址,实现char指针的修改,把它指向系统分配的内存空间了。

strlen(MyData)+1 是告诉Window 我给的string有多长,包括NULL character.

楼主感觉可以的话可以查查msdn,它确实是我们大家最好的老师。

5 楼

写得很好,可惜我看不懂

6 楼

[quote]你连代码都看不懂????
补基础....[/quote]


高手,注意这里是新手入门区,你是不是进错地方啦!!!![em14]

7 楼

QQ群:4712525 欢迎各位编程大虾,老鹰级人物进入研究,指导!

我来回复

您尚未登录,请登录后再回复。点此登录或注册