Qt_屏幕保护程序、进程监听、数据库读取、屏幕保护
这个小项目呢是接收被人写的一个代码,自己稍微加工改动了一下,改成自己的喜欢的风格吧,我不喜欢里面加一堆对当前没有用的东西,所以基本就不相关的都删除了。今天是1024
必须的水一篇。
文章目录
- 钩子部分
- 进行监听部分
- 数据库查询部分
- 屏保
关键字:
Qt
、HHOOK
、屏幕保护程序
、数据库
、关键进程监听
钩子部分
先上关键代码,使用钩子伙子键盘和鼠标,并屏蔽win键 alt键和F4键
bool isLoginShow = false;
int count = 0;
HHOOK keyHook = NULL;
HHOOK mouseHook = NULL;/*** @brief keyProc* @param nCode* @param wParam* @param lParam* @return* 键盘钩子过程,屏蔽了win键 alt键和F4键*/
LRESULT CALLBACK keyProc(int nCode,WPARAM wParam,LPARAM lParam )
{Q_UNUSED(wParam)Q_UNUSED(nCode)KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;if(isLoginShow)if((pkbhs->vkCode == VK_LWIN || pkbhs->vkCode == VK_RWIN )|| (pkbhs->vkCode == VK_F4 && pkbhs->flags & LLKHF_ALTDOWN ))return 1;count = 0;return 0; //返回1表示截取消息不再传递,返回0表示不作处理,消息继续传递
}
/*** @brief mouseProc* @param nCode* @param wParam* @param lParam* @return* 鼠标钩子过程*/
LRESULT CALLBACK mouseProc(int nCode,WPARAM wParam,LPARAM lParam )
{Q_UNUSED(nCode)Q_UNUSED(wParam)Q_UNUSED(lParam)count = 0;return 0;
}
/*** @brief unHook* 卸载钩子*/
void unHook()
{UnhookWindowsHookEx(keyHook);UnhookWindowsHookEx(mouseHook);
}/*** @brief setHook* 安装钩子,调用该函数即安装钩子*/
void setHook()
{//这两个底层钩子,不要DLL就可以全局keyHook =SetWindowsHookEx( WH_KEYBOARD_LL,keyProc,GetModuleHandle(NULL),0); //底层键盘钩子mouseHook =SetWindowsHookEx( WH_MOUSE_LL,mouseProc,GetModuleHandle(NULL),0); //底层鼠标钩子
}
/*** @brief SetProcessAutoRunSelf* @param isstart* 自动启动程序,把程序写到开机启动注册表里面*/
void SetProcessAutoRunSelf(bool isstart)
{QString application_name = QApplication::applicationName(); //获取应用名称QSettings *settings = new QSettings(AUTO_RUN, QSettings::NativeFormat); //创建QSetting, 需要添加QSetting头文件if (isstart){QString application_path = QApplication::applicationFilePath(); //找到应用的目录settings->setValue(application_name, application_path.replace("/", "\\")); //写入注册表}else{settings->remove(application_name);}
}
进行监听部分
关键代码,该函数查询某个进程是否启动并返回结果。
bool TrayListener::isProcessRunning(QString processName)
{bool ret = false;HANDLE proHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if ((HANDLE)-1 == proHandle){return false;}PROCESSENTRY32 pInfo; //进程信息pInfo.dwSize = sizeof(PROCESSENTRY32);BOOL bResult = Process32First(proHandle, &pInfo); //获得第一个进程if (!bResult){return false;}QString curProcessName;while (bResult){curProcessName = QString("%1").arg(QString::fromUtf16(reinterpret_cast<const unsigned short *>(pInfo.szExeFile)));if (curProcessName == processName){ret = true;break;}bResult = Process32Next(proHandle, &pInfo); //获得下一个进程}CloseHandle(proHandle); //关闭句柄return ret;
}
数据库查询部分
登录部分就是需要把用户名转换成数据库关键字,关键代码
/*** @brief Login::loginSystem* 数据库校验*/
void Login::loginSystem()
{QString application_path = Config().Get("DataBase_Info","DataBase_File_Path").toString();QSqlDatabase db;if(QSqlDatabase::contains("qt_sql_default_connection"))db = QSqlDatabase::database("qt_sql_default_connection");elsedb = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName(application_path);if(!db.open()){QMessageBox::information(this, QStringLiteral("连接结果"), QStringLiteral("连接数据库失败!"));return;}/*************************************************名字转换*****************************************************/QString username = ui->comboBox->currentText();if(username == QString::fromLocal8Bit("技师")) //前任留下的坑,这里需要注意,VS不做转换会有编码问题username = "Technician";else if(username == QString::fromLocal8Bit("医师")) //前任留下的坑,这里需要注意,VS不做转换会有编码问题username = "Doctor";else if(username == QString::fromLocal8Bit("匿名")) //前任留下的坑,这里需要注意,VS不做转换会有编码问题username = "Emergent";elseusername = "Administrator";/*************************************************名字转换*****************************************************/QString password = ui->lineEdit_password->text();if(password == "" && username != "Emergent"){QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("密码不能为空!"), QStringLiteral("确定"));return;}if(username != "Emergent"){QString strSql = QString("select * from user_info where name ='%1'and password = '%2' ").arg(username).arg(password);QSqlQuery query;query.exec(strSql);QSqlQueryModel queryModel;queryModel.setQuery(query);int nRecordCount = queryModel.rowCount();if (nRecordCount <= 0){QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("用户名或者密码错误!"), QStringLiteral("确定"));ui->lineEdit_password->clear();}else{ui->lineEdit_password->clear();accept();}}else{accept();}
}
屏保
屏保就是加载了一个Gif动画,本来想绘制曲线了,能力不够,渣渣
ui->labelScreen->setScaledContents(true);QMovie *iconShow = new QMovie(":/images/screen.gif");ui->labelScreen->setMovie(iconShow);iconShow->start();
详细项目信息暂不公开。
Qt_屏幕保护程序、进程监听、数据库读取、屏幕保护相关推荐
- 如何多个进程监听同一个端口
1. 问题描述 一个进程监听端口,经验告诉我们,如果多次启动一个进程会报错:"Address already in use!".这是由于bind函数导致的,由于该端口号已经被第一个 ...
- 【做一下1】python 监听数据库变化
前言 用的yolov5,作者自己写的loadStream函数就是依据 streams.txt里面的rtsp流地址列表来新建线程,然后实现多路监控的. 大体就是这个图里面说的,我已经是为了个整体业务,去 ...
- Linux中不同进程同一个端口,linux系统实现多个进程监听同一个端口
通过 fork 创建子进程的方式可以实现父子进程监听相同的端口. 方法:在绑定端口号(bind函数)之后,监听端口号之前(listen函数),用fork()函数生成子进程,这样子进程就可以克隆父进程, ...
- Linux系统之查看进程监听端口方法
Linux系统之查看进程监听端口方法 一.端口监听介绍 二.使用netstat命令 1.netstat命令介绍 2.netstat帮助 3.安装netstat工具 4.列出所有监听 tcp 端口 5. ...
- 单个进程监听多个端口及多个进程监听同一个端口
单个进程监听多个端口 单个进程创建多个 socket 绑定不同的端口,TCP, UDP 都行 多个进程监听同一个端口(multiple processes listen on same port) 方 ...
- electron 主进程向渲染进程发送事件,渲染进程监听事件
主进程执行: //主进程向渲染进程发送消息win.webContents.send('ping', 'whoooooooh!') 渲染进程监听: <script>let ipcRender ...
- python多进程关闭socket_用Python制作一个多进程UDP服务器,一个进程监听一个p
我想用Python制作一个多进程UDP服务器,从一个类中为每个进程监听一个端口: processListener.py:import multiprocessing import socket cla ...
- php进程监听是什么意思,多进程监听同个端口及单进程监听多个端口的php版本实现...
最近在看nginx设计原理时思考到两个问题,便是: 多个进程能否监听同个端口? 单个进程能否监听多个端口? 当然随着学习的深入,答案均是肯定的,在这个过程中笔者为了验证,用php写了两个例子,在这里分 ...
- java利用canal监听数据库
springcloud如何使用canal监听mysql数据库操作 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQ ...
- h5(微信sdk/企信sdk)页面跳转微信小程序,监听微信小程序关闭事件,已解决
H5应用打开小程序,监听小程序关闭: document.addEventListener("visibilitychange", function(){if(document.hi ...
最新文章
- Module 'matplotlib' has no 'contourf' member 使用Python导入matplotlib模块报错
- linux退出 putty_使用putty远程连接linux防止关闭putty程序就停止
- MySQL基础之DML语句
- Android实现ListView(1)
- python数据结构 树_Python数据结构——AVL树的实现
- Keepalived+Nginx实现高可用,反向代理---模拟实现线上环境
- 网站页面直接显示html代码 转义html代码 excel导入题库 解决方法
- SpringBoot中前后端数据交互
- 基于等效积分形式的近似方法——加权余量法(配点法,伽辽金法)求解微分方程近似解
- 差分进化算法(python实现
- python创建一个txt文件
- 多源数据融合算法综述
- 扩展工具将网页保存为PDF
- 2022.3.19-2022.3.27每周刷题
- 苹果公司为什么储备那么多现金?
- Pandas统计分析基础(2):Pandas之数据的读写(读取csv和excel文件)
- 视频去水印工具-在线短视频去水印工具
- 个人理财小助手 —— 数据库(二)
- 【vs2019】vs2019(Visual Studio2019)离线安装包下载详细步骤
- ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8....Cortex-A53,A57,A72