• 11959阅读
  • 17回复

Windows下设置程序自动运行代码 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2012-07-15
关键词: 自动运行
基本原理是创建一个快捷方式到程序->启动目录下,这里并没有用注册表方式(编译器为msvc2008)
文件包含
  1. #ifdef Q_WS_WIN
  2. #include <windows.h>
  3. #include <shlobj.h>
  4. #endif

在.pro中加入下面库链接
  1. win32:LIBS += -lshell32 -lole32 -luser32



  1. // 获取程序启动快捷方式
  2. QString GetStartUpPath()//{{{
  3. {
  4.     QString strPath;
  5. #ifdef Q_WS_WIN
  6.     LPITEMIDLIST    pidl;
  7.     LPMALLOC        pShellMalloc;
  8.     wchar_t         szDir[1024];
  9.     if (SUCCEEDED(SHGetMalloc(&pShellMalloc)))
  10.     {
  11.         if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_STARTUP, &pidl)))
  12.         {
  13.             if (SHGetPathFromIDList(pidl, szDir))
  14.             {
  15.                 strPath = QString::fromWCharArray(szDir) + "\\MyApp.lnk";
  16.             }
  17.             pShellMalloc->Free(pidl);
  18.         }
  19.         pShellMalloc->Release();
  20.     }
  21. #endif
  22.     return strPath;
  23. }//}}}
  24. // 设置是否自动运行
  25. void setAutoRunStatus(bool bAutoRun)//{{{
  26. {
  27.     QString strExe = QApplication::applicationFilePath();
  28.     QString strLink = GetStartUpPath();
  29.     if (bAutoRun)
  30.     {
  31. #ifdef Q_WS_WIN
  32.         HRESULT hr = CoInitialize(NULL);
  33.         if (SUCCEEDED(hr))
  34.         {
  35.             IShellLink *pisl;
  36.             hr = CoCreateInstance(CLSID_ShellLink, NULL,
  37.                     CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pisl);
  38.             if (SUCCEEDED(hr))
  39.             {
  40.                 IPersistFile* pIPF;
  41.                 //这里是我们要创建快捷方式的原始文件地址
  42.                 pisl->SetPath(strExe.toStdWString().c_str());
  43.                 hr = pisl->QueryInterface(IID_IPersistFile, (void**)&pIPF);
  44.                 if (SUCCEEDED(hr))
  45.                 {
  46.                     //这里是我们要创建快捷方式的目标地址
  47.                     pIPF->Save(strLink.toStdWString().c_str(), FALSE);
  48.                     pIPF->Release();
  49.                 }
  50.                 pisl->Release();
  51.             }
  52.             CoUninitialize();
  53.         }
  54. #endif
  55.     }
  56.     else
  57.     {
  58.         QFile::remove(strLink);
  59.     }
  60. }//}}}
  61. // 获取自动运行状态
  62. bool getAutoRunStatus()//{{{
  63. {
  64.     QString strLink = GetStartUpPath();
  65.     bool bAutoRun = QFile::exists(strLink);
  66.     return bAutoRun;
  67. }//}}}

二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线计划

只看该作者 1楼 发表于: 2012-07-15
学习一下,一直想知道如何能自动启动啊,感谢分享!
好好学习,天天向上。
离线计划

只看该作者 2楼 发表于: 2012-07-15
回 楼主(XChinux) 的帖子
请问,用QtSDK还需要包含其它头文件吗?
好好学习,天天向上。
离线XChinux

只看该作者 3楼 发表于: 2012-07-15
已添加头文件和库。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线计划

只看该作者 4楼 发表于: 2012-07-15
回 3楼(XChinux) 的帖子
添加头文件之后编译还有一个错误,我是个初学者,上边的代码都读不懂,能否给个实例,让我修改一下就能使用。
好好学习,天天向上。
离线XChinux

只看该作者 5楼 发表于: 2012-07-15
我用的是MSVC2008,你用的是mingw,你得网上查一下,它在哪个库中,修改下链接库。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 6楼 发表于: 2012-07-15
Re:回 3楼(XChinux) 的帖子
引用第4楼计划于2012-07-15 17:06发表的 回 3楼(XChinux) 的帖子 :
添加头文件之后编译还有一个错误,我是个初学者,上边的代码都读不懂,能否给个实例,让我修改一下就能使用。

加上
win32:LIBS += -luuid
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线计划

只看该作者 7楼 发表于: 2012-07-15
回 6楼(XChinux) 的帖子
OK,我试一下。
好好学习,天天向上。
离线zhucl1006
只看该作者 8楼 发表于: 2012-08-08
学习了
离线lyjbbq

只看该作者 9楼 发表于: 2012-08-17
  
离线toby520

只看该作者 10楼 发表于: 2012-10-08
版主多分享些技术
QtQML多多指教开发社区 http://qtclub.heilqt.com
将QtCoding进行到底
关注移动互联网,关注金融
开发跨平台客户端,服务于金融行业
专业定制界面
群号:312125701   373955953(qml控件定做)
在线liuyuanan

只看该作者 11楼 发表于: 2012-11-13
回 楼主(XChinux) 的帖子
   顶楼主,设置成功了
离线cyuyuanc
只看该作者 12楼 发表于: 2013-01-13
离线stream966

只看该作者 13楼 发表于: 2013-02-04
支持了  看看了
离线walnut_tom

只看该作者 14楼 发表于: 2013-09-06
快捷方式创建 可以用 QFile::link 函数
离线XChinux

只看该作者 15楼 发表于: 2013-09-07
引用第14楼walnut_tom于2013-09-06 23:51发表的  :
快捷方式创建 可以用 QFile::link 函数

这个可以吗?如果可以的话,那太好了。
我原来一直以为windows下这个方法创建的可能与 linux下ln命令相似,都是创建软链接或硬链接。我然后试试看。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线滴血雄鹰
只看该作者 16楼 发表于: 2013-10-17
收藏下
离线big_mouse

只看该作者 17楼 发表于: 2020-04-15
快速回复
限100 字节
 
上一个 下一个