#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; }