读书人

开机启动项(注册表有关问题)

发布时间: 2012-09-14 23:00:48 作者: rapoo

开机启动项(注册表问题)
我在网上看了一下,让自己写的程序随开机启动。看了好像很简单,回来弄总是实现不了。只有来求教了~~~

比如一个要将一个简单的对话框随开机启动吧,我的一段简单的代码:

C/C++ code
         HKEY hKey;    LONG lRes;    char FilePath[100];    LONG Set;    LPCTSTR lRun="Software\\Microsoft\\Windows\\CurrentVersion\\Run";    lRes=RegOpenKeyEx(HKEY_LOCAL_MACHINE,lRun,0,KEY_WRITE,&hKey);    if (lRes!=ERROR_SUCCESS)    {        MessageBox("写入注册表失败!");        return FALSE;    }    DWORD dWord;    dWord=GetModuleFileName(NULL,FilePath,100);    Set=RegSetValueEx(hKey,"StatrWindow",0,REG_SZ,(CONST BYTE*)FilePath,dWord);    if (Set!=ERROR_SUCCESS)    {        MessageBox("写入注册表失败!");        return FALSE;    }    RegCloseKey(hKey);

调试了一下,路径、返回值都没错。问题是就是在注册表(RUN)下看不到我的的程序(StartWindow),当然也就不会有随开机启动了。
补充一下,我的代码放在OnInitDialog()中,会不会有什么问题这样!
请问一下是哪里出了问题?要怎么改?或者有什么更好、更方便的做法吗?望不吝赐教。谢谢!


[解决办法]
放在OnInitDialog()中,没问题
你看看注册表改变没有?
[解决办法]
你注册表刷新了么?
如果代码都没错,注册表刷新一下才能看到
[解决办法]
看你的注册表是否写到正确的路径。还有32bit/64bit等的区别
[解决办法]
工程名写对了么?
[解决办法]
C/C++ code
BOOL CRWRegistry::SetAutoRun(BOOL bAutoRun){    TCHAR sFilename[_MAX_PATH];    TCHAR sDrive[_MAX_DRIVE];    TCHAR sDir[_MAX_DIR];    TCHAR sFname[_MAX_FNAME];    TCHAR sExt[_MAX_EXT];    GetModuleFileName(AfxGetInstanceHandle(),sFilename,_MAX_PATH);    _tsplitpath(sFilename,sDrive,sDir,sFname,sExt);        CRegistry Registry;    if (bAutoRun)    {        Registry.Open(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"));          Registry.Write(sFname,sFilename);                }else    {        Registry.Open(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"));          Registry.DeleteValue(sFname);    }    Registry.Close();    CRegistry registry;    if(!registry.VerifyKey(HKEY_CURRENT_USER,_T("Software\\LEDScene\\Option\\")))    {        registry.CreateKey(HKEY_CURRENT_USER,_T("Software\\LEDScene\\Option\\"));    }        if(registry.Open(HKEY_CURRENT_USER,_T("Software\\LEDScene\\Option\\")))    {        if(registry.Write(_T("AutoRun"),bAutoRun))        {                registry.Close();            return TRUE;        }    }    registry.Close();    return FALSE;    }
[解决办法]
你Debug下调试一下,函数返回值都正确吗?
[解决办法]

void CAutoRunDlg::OnBrowse()
{
//只浏览exe文件
CFileDialog fileDlg(TRUE,_T("EXE"),_T("*.exe"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(_T("Executable Files (*.exe) |*.exe ||")));//显示打开文件的对话框

//当操作者选择OK时,程序取得选择文件的全路径名(包括文件的路径及文件名称),并将相应的数值传输给相关的控件变量。
if(fileDlg.DoModal()==IDOK)
{
m_strFileName=fileDlg.GetPathName();

//向将变量中的数值传输给控件显示出来。
UpdateData(FALSE);
}
}

void CAutoRunDlg::OnApply()
{
//更新数据
UpdateData(TRUE);

//写入ini文件
LPCTSTR filename;
filename=m_strFileName;
WritePrivateProfileString(_T("windows"),_T("load"),filename,_T("c:windows\\win.ini"));
}

------解决方案--------------------


看看返回错误是什么?注意自己的权限。

另外,你的操作系统也有关系,VISTA和WIN7的话,要夺权的。

读书人网 >VC/MFC

热点推荐