标题:注册表api函数的问题
只看楼主
cbd666
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2019-9-26
结帖率:66.67%
已结贴  问题点数:10 回复次数:2 
注册表api函数的问题
程序代码:

    HKEY hkey; //打开指定子键
    DWORD lRet;
    DWORD dispo = REG_OPENED_EXISTING_KEY;

    if ((lRet = RegCreateKeyEx(
        HKEY_LOCAL_MACHINE,
        _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
        0,
        NULL,
        REG_OPTION_NON_VOLATILE,
        KEY_ALL_ACCESS,
        NULL,
        &hkey,
        &dispo)) == ERROR_SUCCESS) {

        wchar_t szModule[MAX_PATH];
        GetModuleFileName(NULL, szModule, MAX_PATH); //得到当前执行文件的文件名(包含路径)
        //创建一个新的键值,设置键值数据为文件
        if ((lRet = RegSetValueEx(hkey, _T("SelfRunDemo"), 0, REG_SZ, (BYTE*)szModule, sizeof(szModule))) == ERROR_SUCCESS) {
            SetDlgItemText(IDC_STATIC_CPU, _T("RegSetValueEx成功!")); //设置成功;
        }
        else {
            SetDlgItemText(IDC_STATIC_CPU, _T("RegSetValueEx失败!")); //设置成功;
        }

    }
    else {
        SetDlgItemText(IDC_STATIC_CPU, _T("RegCreateKeyEx失败!")); //设置成功;
    }

    RegCloseKey(hkey);     //关闭子键句柄


感觉自己没有写错哇,但是就不知道为什么会有问题 在调用RegCreateKeyEx就出现了错误。。。求解哇
搜索更多相关主题的帖子: 成功 函数 注册表 NULL api 
2020-01-13 15:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
第一,“在调用RegCreateKeyEx就出现了错误” --- 什么错误?是编译错误,还是运行错误?
第二,代码要完整,且无不相干的代码。
第三,若是 RegCreateKeyEx 返回值不正确,MSDN上说你可以通过其返回值去 Winerror.h 中查找原因,你查了吗?

程序代码:
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
#pragma comment( lib, "Advapi32.lib" )

int main( void )
{
    HKEY hkey;
    DWORD lRet = RegCreateKeyEx( HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run")
                               , 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, NULL );
    if( lRet == ERROR_SUCCESS )
    {
        puts( "ok" );
        RegCloseKey( hkey );
    }
    else
    {
        char* pMsgBuf;
        FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS
                     , NULL, lRet, MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), (LPSTR)&pMsgBuf, 0, NULL );
        puts( pMsgBuf );
        LocalFree( pMsgBuf );
    }
}
运行一下,看看输出结果是什么
2020-01-13 16:19
cbd666
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2019-9-26
得分:0 
回复 2楼 rjsp
emm 确实是权限的问题 我可能以为我之前试过管理员运行 但是实际可能没有 现在自己试了下管理员运行 是可以写入的 用我自己的代码,你说的“MSDN上说你可以通过其返回值去 Winerror.h 中查找原因,你查了吗?” 这个俺不知道哇 winerror.h还可以查 学习了哇 下次贴代码会注意的 谢谢版主

[此贴子已经被作者于2020-1-13 23:04编辑过]

2020-01-13 23:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498920-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.076205 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved