MFC开机启动写注册表

来源:互联网 发布:剑灵天族美女捏脸数据 编辑:程序博客网 时间:2024/05/16 06:55

void CMfcUdpSvrDlg::OnBnClickedPs2()
{
    // TODO: 在此添加控件通知处理程序代码
    //写文件
    CString strWorkPath;
    TCHAR  tszWorkPath[MAX_PATH];
    GetModuleFileName(NULL, tszWorkPath, MAX_PATH);
    strWorkPath.Format(_T("%s"),tszWorkPath)  ;
    int num = strWorkPath.ReverseFind(_T('\\'));
    strWorkPath = strWorkPath.Left(num);
    strWorkPath+=_T("\\MfcUdpSvr.exe");
    //开机自动运行
    if (SetAutoRun(strWorkPath))
    {
    CString dd = _T("设置开机启动成功!");
    ((CListBox *)GetDlgItem(IDC_LIST1))->AddString(dd);//compname
    }
    else
    {
    CString dd = _T("设置开机启动失败!");
    ((CListBox *)GetDlgItem(IDC_LIST1))->AddString(dd);//compname
    }
}

BOOL   SetAutoRun(CString   strPath)//开机自动运行
{
    //其中strPath参数表示要设置为自运行的程序的绝对路径。当设置成功时返回true,否则返回false。
    CString   str;
    HKEY   hRegKey;
    BOOL   bResult;
    str=_T("SOFTWARE\\Microsoft\\windows\\currentversion\\run");
    if(RegOpenKey(HKEY_LOCAL_MACHINE,str,&hRegKey)!=ERROR_SUCCESS)
    {  
        bResult=FALSE;
    }
    else
    {
        /*char buffer[1024]="\0";
        memset(buffer,0,128);
        wcstombs(buffer, str, strPath.GetLength());*/
        str=_T("MfcUdpSvr.exe");
        //_wsplitpath(strPath.GetBuffer(0),NULL,NULL,str.GetBufferSetLength(MAX_PATH+1),NULL);  
        strPath.ReleaseBuffer();
        str.ReleaseBuffer();
        //(strPath.GetLength()+1)*sizeof(TCHAR)
        int s = (strPath.GetLength()+1)*sizeof(TCHAR);
        int d = strPath.GetLength();


 //strPath 为绝对路径 如: C://123.exe

        if(::RegSetValueEx(hRegKey,str,0,REG_SZ,(CONST BYTE *)strPath.GetBuffer(0),s)!=ERROR_SUCCESS)
        {
            bResult=FALSE;
        }
        else
        {
            bResult=TRUE;
        }
        strPath.ReleaseBuffer();
    }
    return   bResult;
}

原创粉丝点击