关于RegDeleteValue的一个问题

naixian1983 2008-04-21 04:21:14


本人程式里有一个check box,当选择check box时,利用RegSetValueEx使一个程式开机后自动运行(已实现),当不选择check box时,利用RegDeleteValue删除注册表,问题再这里出现了,头三次不管时选择还是不选择check box,都不可以删除注册表,但三次选择完后,当不选择check box时就可以删除注册表了,不知道为什么会这样,是我的check box有问题,还是RegDeleteValue有问题


void CTestHookDlg::OnCheck1()
{
// TODO: Add your control notification handler code here

UpdateData(true);


if(((CButton *)GetDlgItem(IDC_CHECK1))-> GetCheck())
{
AutoRun();

}
else
{
StopAutoRun();

}

UpdateData(false);
}


void CTestHookDlg::AutoRun()
{

strPath="C:\\Documents and Settings\\HOOK1\\TestHook\\Release\\TestHook.exe";

str="Software\\Microsoft\\Windows\\CurrentVersion\\Run";

if (::RegOpenKey(HKEY_LOCAL_MACHINE,str, &hRegKey)==ERROR_SUCCESS)
{
_splitpath(strPath.GetBuffer(0),NULL,NULL,str.GetBufferSetLength(MAX_PATH+1),NULL);
strPath.ReleaseBuffer();
str.ReleaseBuffer();

RegSetValueEx(hRegKey,str, 0, REG_SZ, (CONST BYTE *)strPath.GetBuffer(0), strPath.GetLength());



}


UpdateData(false);
}

void CTestHookDlg::StopAutoRun()
{


RegDeleteValue(hRegKey,str);



}

...全文
333 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ringphone 2008-04-21
  • 打赏
  • 举报
回复
代码有问题,StopAutoRun必须先执行过AutoRun才有效,否则hRegKey是无效句柄
OnCheck1里面决定设置自启动与否,则必须先选中check box,设置自启动,然后再取消选择才能删除。我没用过MFC,因此不知道在这个事件里UpdateData(true);是否有效,如果是无效的,则第一次选择,事件里获取到的是未选择状态,此时hRegKey无效,删除无效,再选择,设置自启动,第三次选择,删除成功,这就是三次选择的由来。
greatws 2008-04-21
  • 打赏
  • 举报
回复
如果一开始IDC_CHECK1在CHECKED状态,你点一下,变为UNCHECKED,然后直接执行的是这段代码
void CTestHookDlg::StopAutoRun()
{
RegDeleteValue(hRegKey,str);
}

则肯定是无效的,因为没有使用RegOpenKey来打开注册表



16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧