使用VS開發的一個開機自啟動啟動、可接收指定數據關閉電腦或打開其他程式

使用VS開發的一個開機自啟動啟動、可接收指定數據關閉電腦或打開其他程式需要注意的幾點

  1. 為了能夠在其他電腦上運行自己寫的程式,需要在VS改一下編譯的運行庫。(項目->屬性->配置屬性->C/C++->程式碼生成->運行庫->多執行緒調試(/MTd))
  2. 其中用到了開機自啟動,我用到了註冊表的方法。
 1 //定義路徑最大程度
 2 //定義寫入的註冊表路徑
 3 #define SELFSTART_REGEDIT_PATH "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"
 4 
 5 //設置本身開機自啟動 參數為true表示設置自啟,為false 表示取消
 6  //獲取程式完整路徑
 7     char pName[MAX_PATH] = { 0 };
 8     GetModuleFileNameA(NULL, pName, MAX_PATH);
 9     //在註冊表中寫入啟動資訊
10     HKEY hKey = NULL;
11     LONG lRet = NULL;
12     if (bKey)
13     {
14         //打開註冊表
15         lRet = RegOpenKeyExA(HKEY_CURRENT_USER, SELFSTART_REGEDIT_PATH, 0, KEY_ALL_ACCESS, &hKey);
16         //判斷是否成功
17         if (lRet != ERROR_SUCCESS)
18         {
19             return;
20         }
21         else
22         {
23 
24             //寫入註冊表,名為testProtect,可以自己修改
25             RegSetValueExA(hKey, "My_Shutdown", 0, REG_SZ, (const unsigned char*)pName, strlen(pName) + sizeof(char));
26             cout << "註冊成功!" << endl;
27             //關閉註冊表
28             RegCloseKey(hKey);
29             return;
30         }
31     }
32     else
33     {
34         lRet = RegOpenKeyExA(HKEY_CURRENT_USER, SELFSTART_REGEDIT_PATH, 0, KEY_ALL_ACCESS, &hKey);
35         //判斷是否成功
36         if (lRet != ERROR_SUCCESS)
37         {
38             return;
39         }
40         else
41         {
42 
43             //刪除名為testProtect的註冊表資訊
44             RegDeleteValueA(hKey, "My_Shutdown");
45 
46             //關閉註冊表
47             RegCloseKey(hKey);
48             return;
49         }
50     }

  3. 我寫的是一個控制台程式,而且並不需要一個窗口,所以我是用了一個宏:#pragma comment( linker, “/subsystem:windows /entry:mainCRTStartup” )