使用VS开发的一个开机自启动启动、可接收指定数据关闭电脑或打开其他程序
使用VS开发的一个开机自启动启动、可接收指定数据关闭电脑或打开其他程序需要注意的几点
- 为了能够在其他电脑上运行自己写的程序,需要在VS改一下编译的运行库。(项目->属性->配置属性->C/C++->代码生成->运行库->多线程调试(/MTd))
- 其中用到了开机自启动,我用到了注册表的方法。
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" )