开机启动项(注册表问题)
我在网上看了一下,让自己写的程序随开机启动。看了好像很简单,回来弄总是实现不了。只有来求教了~~~
比如一个要将一个简单的对话框随开机启动吧,我的一段简单的代码:
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);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的话,要夺权的。