1、编写控制台程序又需要设置开机自启功能的时候,往往会需要隐藏Dos黑窗口,只需要一行代码就能完成:
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) //隐藏DOS黑窗口
2、开机自启一般通过写入自启注册表"Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"的目录中,可以写在本地自启目录HKEY_LOCAL_MACHINE下,也可以写在当前用户HKEY_CURRENT_USER的目录下:
//定义路径最大程度
#define MAX_PATH 4096
//定义写入的注册表路径
#define SELFSTART_REGEDIT_PATH "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"
//设置本身开机自启动 参数为true表示设置自启,为false 表示取消
BOOL SetSelfStart(bool bKey)
{
//获取程序完整路径
char pName[MAX_PATH] = { 0 };
GetModuleFileNameA(NULL, pName, MAX_PATH);
//在注册表中写入启动信息
HKEY hKey = NULL;
LONG lRet = NULL;
if ( bKey)
{
//打开注册表
lRet = RegOpenKeyExA(HKEY_CURRENT_USER, SELFSTART_REGEDIT_PATH, 0, KEY_ALL_ACCESS, &hKey);
//判断是否成功
if (lRet != ERROR_SUCCESS)
{
return FALSE;
}
else
{
//写入注册表,名为testProtect,可以自己修改
RegSetValueExA(hKey, "testProtect", 0, REG_SZ, (const unsigned char*)pName, strlen(pName) + sizeof(char));
//关闭注册表
RegCloseKey(hKey);
return TRUE;
}
}
else
{
lRet = RegOpenKeyExA(HKEY_CURRENT_USER, SELFSTART_REGEDIT_PATH, 0, KEY_ALL_ACCESS, &hKey);
//判断是否成功
if (lRet != ERROR_SUCCESS)
{
return FALSE;
}
else
{
//删除名为testProtect的注册表信息
RegDeleteValueA(hKey, "testProtect");
//关闭注册表
RegCloseKey(hKey);
return TRUE;
}
}
}
代码运行之后,就可以实现开机自启功能。