VS2012+C語言+設置程序開機自動啓動+示例

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章