(转自:http://blog.csdn.net/weiren2006/article/details/7443362)

主要原理是修改Windows的注册表来实现的,Qt的QSettings提供了访问ini,注册表的功能

//读取注册表的信息,让程序自启动
voidMainWindow::Readregedit(bool isAutoRun)
{
QSettings*reg=newQSettings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",QSettings::NativeFormat);
//开机自动运行
if(isAutoRun)
{
  reg->setValue("app",QApplication::applicationFilePath());
}
else
{
   reg->setValue("app","");
}
} //开机自启动,主窗体隐藏
if(argc>&&(argv[]==(char*)"//min"))
{
  w.hide();
}
else
{
  w.showNormal();
}
PS:开机启动的时候,小托盘图标有可能不能显示出来,可以利用资源文件里面的图标,
     作为小托盘,这样就可以解决这个问题。

让软件在系统启动时自动运行,可通过修改注册表实现。

在\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run中添加需启动的程序路径,代码如下:

voidautoStart(boolflag)
{
//写入注册表,开机自启动
HKEYhKey;
//找到系统的启动项
LPCTSTRlpRun=(wchar_t*)QString("Software\\Microsoft\\Windows\\CurrentVersion\\Run").utf16();
//打开启动项Key
longlRet=RegOpenKeyEx(HKEY_LOCAL_MACHINE,lpRun,0,KEY_WRITE,&hKey);
if(lRet==ERROR_SUCCESS)
{
DWORDdwRet=QApplication::applicationFilePath().length()*2;
//添加一个子Key,并设置值
if(flag==true)
{
lRet=RegSetValueEx(hKey,(WCHAR*)QString("test").utf16(),0,REG_SZ,
(BYTE*)QApplication::applicationFilePath().utf16(),dwRet);
}
else
{
lRet=RegSetValueEx(hKey,(WCHAR*)QString("test").utf16(),0,REG_SZ,
(BYTE*)"",dwRet);
}
//关闭注册表
RegCloseKey(hKey);
if(lRet!=ERROR_SUCCESS)
{
qDebug("error");
}
}
}
05-08 15:14