QRunInfo是从Qt-Installer-Framework中提取的一些系统验证和运行信息获取的一些Qt封装。我只是为部分接口整理和组织下代码。代码基于LGPL2.1和LGPL3.0协议。
QRunInfo 地址:https://github.com/dushibaiyu/QRunInfo
其中涉及Qt的core模块,gui和widget模块(主要是AdminAuthorization)有用QWidget。
此文主要介绍下里面的一些封装好的一些API:
- AdminAuthorization类:
此类是为了验证程序的运行权限,和提权运行。提供了两个静态方法:
static bool hasAdminRights();//判断当前运行的程序有没有管理员权限。 static bool execute(QWidget *parent, const QString &programs, const QStringList &arguments);//以管理员身份启动新的程序: 其中: QWidget *parent//提示对话框的父级窗体。Win下没用。 const QString &programs //要启动的程序的命令 const QStringList &arguments//程序启动参数
- KDLockFile 类:
此类是锁定和解锁文件操作的封装:Qt有QLockFile类的,更好用。
KDLockFile 在KDRunOnceChecker 中有用。
explicit KDLockFile(const QString &name);//构造函数,const QString &name 为要锁定的文件path ~KDLockFile();//析构函数,如果文件锁定,析构时会自动解锁。 QString errorString() const;//返回错误信息 bool lock();//锁定文件,成功返回true bool unlock();//解定文件,成功返回true
- KDRunOnceChecker类
此类是检查是否当前程序是第一次启动,也就是有没有其他市里在运行。和检查文件是否锁定。
enum Dependencies { //检查模式 ProcessList, //检查运行程序列表是否有其他实例 Lockfile, //检查文件是否被锁定 Both };//两者全部检查 explicit KDRunOnceChecker(const QString &filename = QString());//构造函数,const QString &filename 是你要检查的是否锁定的文件 bool isRunning(Dependencies depends);//检查函数,根据你检查的选项,返回检查结果。
- KDSelfRestarter类:
程序退出自动重启类。
KDSelfRestarter(int argc, char *argv[]);//构造函数,传入当前程序启动的参数。 ~KDSelfRestarter();//如果设置为自动重启,则此析构函数执行时,就会自动按照当前参数启动当前实例。 static bool restartOnQuit();//返回是否自动重启 static void setRestartOnQuit(bool restart);//设置是否自动重启。
- VolumeInfo类:
分区信息结构
static VolumeInfo fromPath(const QString &path);//路径获取路径所在的分区信息 QString mountPath() const;//挂载的path,win下为盘符,即C:/ QString fileSystemType() const;//文件系统类型,在win下可能无效, QString volumeDescriptor() const;//分区描述符,(好像是分区的ID一类的,非盘符) quint64 size() const;//分区大小,单位字节 quint64 availableSize() const;//可用空间,单位字节
- ProcessInfo结构体:
quint32 id; //进程号,即进程ID QString name;//进程名,在win下是进程的全部路径
- RunInfo类:
里面全是静态函数,类名只是一个简单的组合
static quint64 installedMemory(); //当前系统的内存大小 static QList<VolumeInfo> mountedVolumes();//当前系统的分区信息 static QList<ProcessInfo> runningProcesses();//正在运行的进程列表 static bool killProcess(const ProcessInfo &process, int msecs = 30000);//强制杀死一个进程,返回结果,注:linux和mac未实现 static bool pathIsOnLocalDevice(const QString &path);//检查路径是不是在本地磁盘上,注:linux和mac未实现
注:提取出来后,我没有对支持的平台进行全部测试,win下基本无误,linux和mac未测试,请您测试后无误再使用,如有问题可以联系我,github给我提交Issues。
10月30日更新:
添加了命名空间QRunInfo,所有api的类均在此命名空间中。
添加Win3SysPath类:
此类是windows下专用,一共两个api,一个获取系统预定义的目录地址。
一个为应用程序创建快捷方式
static bool createLink(const QString &fileName, const QString &linkName, const QString &arguments = QString(), const QString &iconPath = QString(), const QString &iconId = QString());//创建快捷方式:fileName:源文件,完整地址,linkName:创建的快捷方式的路径名字,完整地址 static QString getWinSysDir(SYSTEMPATH path);//获取系统的路径,支持的路径在SYSTEMPATH 枚举里,如果获取失败,返回空。 下面是SYSTEMPAT枚举变量的值: enum SYSTEMPATH { UserDeskTopPath = CSIDL_DESKTOPDIRECTORY,//桌面 UserDocumentsPath = CSIDL_PERSONAL,//我的文档 UserMusicPath = CSIDL_MYMUSIC,//我的音乐 UserVideoPath = CSIDL_MYVIDEO,//我的视频 UserPricturesPath = CSIDL_MYPICTURES,//我的图片 UserFavoritesPath = CSIDL_FAVORITES,//我的收藏 UserAppDataPath = CSIDL_APPDATA,//当前用户的特定的应用程序数据存储文件夹 UserLocalAppDataPath = CSIDL_LOCAL_APPDATA,//表示当前用户的应用程序数据文件夹,例如:C:\Documents and Settings\username\Local Settings\Application Dat UserNetHoodPath = CSIDL_NETHOOD,//表示当前用户存在的网络连接的文件夹,例如:C:\Documents and Settings\username\NetHood UserPrintHoodPath = CSIDL_PRINTHOOD,//表示当前用户存在的网络打印机的虚拟文件夹,例如:C:\Documents and Settings\username\PrintHood UserStartMenuPath = CSIDL_STARTMENU,//用户开始菜单 UserStartMenuProgramsPath = CSIDL_PROGRAMS,//用户开始程序菜单 UserStartUpPath = CSIDL_STARTUP,//启动目录 UserSentTo = CSIDL_SENDTO,//表示当前用户的“发送到”文件夹,例如:C:\Documents and Settings\username\SendTo AdminToolsPath = CSIDL_COMMON_ADMINTOOLS,//表示所有用户的“管理工具”系统文件夹 CommonAppData = CSIDL_COMMON_APPDATA,//表示所有用户的特定的应用程序数据存储文件夹,例如:C:\Documents and Settings\All Users\Application Data CommonDeskTopPath = CSIDL_COMMON_DESKTOPDIRECTORY,//表示所有用户的“桌面”文件夹,例如:C:\Documents and Settings\All Users\Desktop。 CommonDocumentsPath = CSIDL_COMMON_DOCUMENTS,//表示所有用户的“我的文档”文件夹,例如:C:\Documents and Settings\All Users\Documents CommonFavoritesPath =CSIDL_COMMON_FAVORITES,//表示所有用户的“我的收藏夹”文件夹。 CommonMusicPath = CSIDL_COMMON_MUSIC,// 公共音乐 0x0035 CommonPricturesPath = CSIDL_COMMON_PICTURES,// 公共图片0x0036 CommonVideoPath = CSIDL_COMMON_VIDEO,//公共视频 0x0037 CommonStartMenuProgramsPath = CSIDL_COMMON_PROGRAMS,//表示所有用户的“程序”文件夹,例如:C:\Documents and Settings\All Users\Start Menu\Programs CommonStartMenuPath = CSIDL_COMMON_STARTMENU,//表示所有用户的“开始菜单”文件夹,例如:C:\Documents and Settings\All Users\Start Menu CommonStartUpPath = CSIDL_COMMON_STARTUP,//表示所有用户的“启动”文件夹,例如:C:\Documents and Settings\All Users\Start Menu\Programs\Startup CommonTemplantesPath = CSIDL_COMMON_TEMPLATES,//表示所有用户的“模块”文件夹,例如:C:\Documents and Settings\All Users\Templates IECookiesPath = CSIDL_COOKIES,//表示当前用户Internet Explorer的cookie 文件夹,例如:C:\Documents and Settings\username\Cookies IEHistoryPath = CSIDL_HISTORY,//表示Inernet Explorer的“历史记录”文件夹 IECachePath = CSIDL_INTERNET_CACHE,//表示当前用户的Internet Explorer的"Cache"文件夹,例如:C:\Documents and Settings\username\Temporary Internet Files TemplantesPath = CSIDL_TEMPLATES,//模板目录 FontsPath = CSIDL_FONTS,//字体目录 ProgramFilesPath = CSIDL_PROGRAM_FILES,//表示程序文件的文件夹,例如:C:\Program Files ProgramFilesCommonPath =CSIDL_PROGRAM_FILES_COMMON,//表示系统程序共用组件文件夹,例如:C:\Program Files\Common SystemPath = CSIDL_SYSTEM,//表示WINDOWS系统的系统文件夹,例如:C:\WINNT\SYSTEM32 WindowsPath = CSIDL_WINDOWS//表示的是系统中Windows目录的文件珍,例如:C:\WINNT };
博主很强大,赞一个
博主是菜鸟的、、、
超级赞,非常不错
lee大神,你客气了、、
大神,我来仰望你了
学习了
[赶火车]