写注册表让程序自动启动的问题!
如下方式设置程序在系统启动时自动运行:
bool CMyApp::SetAutoRun()
{
HKEY hKey;
LPCTSTR data_Set="Software\\Microsoft\\Windows\\CurentVersion\\Run";
LPCTSTR lpPath =path;
LPCTSTR keyname="MyExe";
if(!::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set,0,KEY_WRITE,&hKey))
{
MessageBox(NULL,"无法打开注册表","课表查询",MB_OK|MB_ICONINFORMATION);
return 0;
}
if( ERROR_SUCCESS!=::RegSetValueEx(hKey,keyname,NULL,REG_SZ,(const BYTE*)&lpPath,
strlen(lpPath)+1))
{
MessageBox(NULL,"设置 ‘随系统启动’ 失败","MyExe",MB_OK|MB_ICONINFORMATION);
LPSTR lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER ,NULL,
GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),(char*)&lpMsgBuf,0,NULL);
MessageBox(NULL,lpMsgBuf,"Get Last Error",MB_OK | MB_ICONEXCLAMATION);
LocalFree(lpMsgBuf);
return 0;
}
return 1;
::RegCloseKey(hKey);
}
其中的路径path是通过如下方式获取的:
::GetModuleFileName(NULL,path,256);//获取可执行文件路径
_splitpath(path,drive,dir,title,ext);//拆分文件路径
现在的问题是,程序不能正确写注册表。执行上面 代码就提示:"设置 ‘随系统启动’ 失败",然后弹出错误原因“无效的窗口句柄”,察看注册表,Software\\Microsoft\\Windows\\CurentVersion\\Run下也没有通过RegSetValueEx设置的启动项。
程序已经做到最后,被这个小问题烦了几个星期都解决不了,不知道错在哪里,所以请大家帮忙看一下,谢了。