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<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
    };

 

9 thoughts on “QRunInfo: Qt 系统运行信息获取的一些简单封装”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.