​ 这个小项目呢是接收被人写的一个代码,自己稍微加工改动了一下,改成自己的喜欢的风格吧,我不喜欢里面加一堆对当前没有用的东西,所以基本就不相关的都删除了。今天是1024必须的水一篇。


文章目录

  • 钩子部分
  • 进行监听部分
  • 数据库查询部分
  • 屏保

关键字: QtHHOOK屏幕保护程序数据库关键进程监听

钩子部分

​ 先上关键代码,使用钩子伙子键盘和鼠标,并屏蔽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. 如何多个进程监听同一个端口

    1. 问题描述 一个进程监听端口,经验告诉我们,如果多次启动一个进程会报错:"Address already in use!".这是由于bind函数导致的,由于该端口号已经被第一个 ...

  2. 【做一下1】python 监听数据库变化

    前言 用的yolov5,作者自己写的loadStream函数就是依据 streams.txt里面的rtsp流地址列表来新建线程,然后实现多路监控的. 大体就是这个图里面说的,我已经是为了个整体业务,去 ...

  3. Linux中不同进程同一个端口,linux系统实现多个进程监听同一个端口

    通过 fork 创建子进程的方式可以实现父子进程监听相同的端口. 方法:在绑定端口号(bind函数)之后,监听端口号之前(listen函数),用fork()函数生成子进程,这样子进程就可以克隆父进程, ...

  4. Linux系统之查看进程监听端口方法

    Linux系统之查看进程监听端口方法 一.端口监听介绍 二.使用netstat命令 1.netstat命令介绍 2.netstat帮助 3.安装netstat工具 4.列出所有监听 tcp 端口 5. ...

  5. 单个进程监听多个端口及多个进程监听同一个端口

    单个进程监听多个端口 单个进程创建多个 socket 绑定不同的端口,TCP, UDP 都行 多个进程监听同一个端口(multiple processes listen on same port) 方 ...

  6. electron 主进程向渲染进程发送事件,渲染进程监听事件

    主进程执行: //主进程向渲染进程发送消息win.webContents.send('ping', 'whoooooooh!') 渲染进程监听: <script>let ipcRender ...

  7. python多进程关闭socket_用Python制作一个多进程UDP服务器,一个进程监听一个p

    我想用Python制作一个多进程UDP服务器,从一个类中为每个进程监听一个端口: processListener.py:import multiprocessing import socket cla ...

  8. php进程监听是什么意思,多进程监听同个端口及单进程监听多个端口的php版本实现...

    最近在看nginx设计原理时思考到两个问题,便是: 多个进程能否监听同个端口? 单个进程能否监听多个端口? 当然随着学习的深入,答案均是肯定的,在这个过程中笔者为了验证,用php写了两个例子,在这里分 ...

  9. java利用canal监听数据库

    springcloud如何使用canal监听mysql数据库操作 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQ ...

  10. h5(微信sdk/企信sdk)页面跳转微信小程序,监听微信小程序关闭事件,已解决

    H5应用打开小程序,监听小程序关闭: document.addEventListener("visibilitychange", function(){if(document.hi ...

最新文章

  1. Module 'matplotlib' has no 'contourf' member 使用Python导入matplotlib模块报错
  2. linux退出 putty_使用putty远程连接linux防止关闭putty程序就停止
  3. MySQL基础之DML语句
  4. Android实现ListView(1)
  5. python数据结构 树_Python数据结构——AVL树的实现
  6. Keepalived+Nginx实现高可用,反向代理---模拟实现线上环境
  7. 网站页面直接显示html代码 转义html代码 excel导入题库 解决方法
  8. SpringBoot中前后端数据交互
  9. 基于等效积分形式的近似方法——加权余量法(配点法,伽辽金法)求解微分方程近似解
  10. 差分进化算法(python实现
  11. python创建一个txt文件
  12. 多源数据融合算法综述
  13. 扩展工具将网页保存为PDF
  14. 2022.3.19-2022.3.27每周刷题
  15. 苹果公司为什么储备那么多现金?
  16. Pandas统计分析基础(2):Pandas之数据的读写(读取csv和excel文件)
  17. 视频去水印工具-在线短视频去水印工具
  18. 个人理财小助手 —— 数据库(二)
  19. 【vs2019】vs2019(Visual Studio2019)离线安装包下载详细步骤
  20. ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8....Cortex-A53,A57,A72

热门文章

  1. java请求接口参数为json格式
  2. SSM实现校园二手交易平台
  3. java 页面 pdf 下载_java下载PDF文件
  4. Qt界面语言设置(官方汉化)
  5. Nginx之——参数详解
  6. Java | ProGuard——java代码混淆利器
  7. python标准库abc的实用技巧
  8. Kali linux 学习笔记(十三)主动信息收集——端口扫描(UDP扫描、TCP扫描) 2020.2.22
  9. ds18b20触摸没反应_写个DS18B20初始化程序,死活没反应
  10. ARM Keil5下载安装并导入STM32芯片