#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
char* ReplaceString(const char *srcStr, const char *src, const char *dest) //替换字符串,获得文件路径
{
char *ptr;
int len = strlen(srcStr);
ptr = (char*)malloc(sizeof(char)*len+1);
strcpy(ptr, srcStr);
for ( int i=0; i<len; ++i )
{
if ( 0==strncmp(&ptr[i], src, strlen(src)) ) //查找想要被替换字符串的起始位置
{
strncpy(&ptr[i], dest, strlen(dest)); //替换字符串的长度为目标字符串的长度
}
}
ptr[len+strlen(dest)-strlen(src)] = '\0'; //计算出字符串结束位置,并加上‘/0’
return ptr;
}
int StartupRun(const char *key, const char *path) //key启动项名称,path为要开机启动的程序
{
HKEY hKey;
DWORD dwDisposition;
LONG result = RegCreateKeyEx( //用来创建注册表键,如果该键已经存在,则打开它(注册表键不区分大小写)
HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
NULL, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hKey, &dwDisposition );
if(result != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return 0;
}
result = RegSetValueEx(hKey, key, NULL, REG_SZ, (const unsigned char *)path, strlen(path)+1); //在注册表项下设置指定值的数据和类型。
if(result != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return 0;
}
RegCloseKey(hKey);
return 1;
}
int main(int argc,char *argv[])
{
//StartupRun("偷闲--开机启动程序", "C:\\Users\\Administrator\\Documents\\Visual Studio 2012\\Projects\\tx\\Release\\tx.exe"); //绝对路径
//StartupRun("偷闲--开机启动程序", ".\\tx.exe");//不可用
printf("获取程序当前路径:");
printf(argv[0]); //argv[0]为当前程序的路径
printf("\n");
const char *str;
str = ReplaceString(argv[0], "StartRun.exe", "tx.exe"); //StartRun.exe为当前程序的名称,tx.exe为想要开机启动程序的名称,二者在同一目录下
StartupRun("偷闲--开机启动程序1.0", str);
printf("\n设置开机启动程序路径:");
printf(str);
printf("\n\n设置成功\n\n");
system("pause");
return 0;
}
转载于:https://blog.51cto.com/leibnitz/1405770