QRunInfo: Qt 系统运行信息获取的一些简单封装

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  mountedVolumes();//当前系统的分区信息
static QList  runningProcesses();//正在运行的进程列表
static bool  killProcess(const ProcessInfo &process, int msecs = 30000);//强制杀死一个进程,返回结果,注:linux和mac未实现
static bool  pathIsOnLocalDevice(const QString &path);//检查路径是不是在本地磁盘上,注:linux和mac未实现