修改注册表使程序随系统启动自动运行
在注册表分支HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run下建立一个字符串String型子键,名字不要重复就可以
,其内容为你想在启动时运行的程序全路径。这样就会自动在启动时运行。
HKEY hKEY;
CString KeyTree = \\\"SOFTWARE\\\\\\\\Microsoft\\\\\\\\Windows\\\\\\\\CurrentVersion\\\\\\\\Run\\\"; //主鍵
CString MainKey=\\\"KillWindow\\\"; //子键
CString NewData=\\\"要启动文件名\\\"; //子键新值
long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,KeyTree,0,KEY_WRITE,&hKEY));
if(ret0!=ERROR_SUCCESS)
{
AfxMessageBox(\\\"error\\\");
return;
}
LPBYTE Data=CStringToLPBYTE(NewData);
DWORD DataSize=NewData.GetLength()+1;
DWORD type=REG_SZ;
long ret1=::RegSetValueEx(hKEY,MainKey,NULL,type,Data,DataSize);
if(ret1!=ERROR_SUCCESS)
{
AfxMessageBox(\\\"设置自动运行错误!\\\");
return;
}
delete Data;
::RegCloseKey(hKEY);
为什么要用C语言写注册表?C语言没有这样的函数啊!
int CreateRun(void)//修改注册表,自动运行程序
{
HKEY hKey;
char WinExe[256];//执行文件自己的路径
char xePath[256];
int i;
char *pbuf;
pbuf=GetCommandLine();
strcpy(WinExe,pbuf+1);
for(i=(int)strlen(WinExe);i>=0;i--)
{
if(WinExe==\\’\\\"\\’)
{ [Page]
WinExe = 0;
i = -10000;
}
}
// get running path
strcpy(ExePath,WinExe);
for(i=(int)strlen(WinExe);i>=0;i--)
{
if(WinExe==\\’\\\\\\\\\\’)
{
ExePath[i+1] = 0;
i = -10000;
}
}
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,\\\"SOFTWARE\\\\\\\\Microsoft\\\\\\\\Windows\\\\\\\\CurrentVersion\\\\\\\\Run\\\"
,0,KEY_WRITE, &hKey)!=ERROR_SUCCESS)
return -1;
if(RegSetValueEx(hKey,\\\"Five32\\\",0,REG_SZ,(const unsigned char *)WinExe,strlen(pval)+1)!=ERROR_SUCCESS)
{
RegCloseKey(hKey);
return -1;
}
RegCloseKey(hKey);
return 0;
}