前言

在第一篇文章中,通过了python调用opencv的模板匹配函数,通过对屏幕截图然后和模板对比,实现了上位机界面的自动点击。理论上只要是能出现图片的地方,就能使用这种方式,实现自动点击。

正好最近国家倡导节约用电,我司紧跟国家号召,在大家的电脑上部署了省电系统,只要长时间不动鼠标键盘,电脑就会自动锁屏睡眠,时间间隔大约5分钟,经常出去上个厕所打杯水的时间,回来电脑就锁上了,有点影响工作(绝不是影响摸鱼)。。。


一、工作流程

干掉电脑自动锁屏和我所说的图片模板匹配脚本有啥关系呢?其实是这样的:电脑自动锁屏并不是到时间就直接锁住,而是现在桌面上出现一个弹窗,上面会出现倒计时,如果倒计时结束还没有操作则锁屏,如果动了鼠标或键盘则弹窗消失。其实说到这里就能发现,干掉自动锁屏的代码逻辑和上位机界面自动点击的效果是一样的。

如图所示是弹窗的部分截图(没必要选完成的图作为模板,只要选择有特征的即可),因为倒计时出现的时候,还有两分钟时间可以操作,所以我们程序只需要每隔一分钟截个屏幕的图,然后和模板进行对比,判断是否出现弹窗,如果出现了弹窗,通过pyautogui自动移动一下鼠标即可,和第一篇文章的函数调用都是一样的,只要改一下延时即可。

二、使用步骤

1. 引入库

引入文件夹操作的库、图像识别库、截图工具库、自动鼠标点击库以及必不可少的时间库,缺少相应的库的话,直接pip3 install即可。相比上一篇的脚本,多了一个sleep操作和图片对比结束之后,将截图删除。

在main中对Image_Compare函数try了一次是因为,以上截图对比的逻辑都是在工作状态,即原本电脑就是没有锁屏的状态,所以当程序运行的过程中人为的win+L锁屏了,程序执行到这里就会报错。

import os
from PIL import ImageGrab, Image
import time
import pyautogui
import cv2
import numpy as np

2. 按钮位置识别点击

def Image_Compare(self, picture):#截屏,同时提前准备一张屏幕上会出现的小图bd.pngimg = ImageGrab.grab()img.save(Desktop+'screen.png','png')#加载原始RGB图像img_rgb = cv2.imread(Desktop+"screen.png")#创建一个原始图像的灰度版本,所有操作在灰度版本中处理,然后在RGB图像中使用相同坐标还原img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)#加载将要搜索的图像模板template = cv2.imread(Desktop+picture,0)#使用matchTemplate对原始灰度图像和图像模板进行匹配res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)#设定阈值,0.7应该可以threshold = 0.8#res大于99.9%loc = np.where( res >= threshold)flag = 0#得到原图像中的坐标for pt in zip(*loc[::-1]):if(pt[0] and pt[1]):# print(pt[0],pt[1])pyautogui.click(pt[0],pt[1])flag = 1breakif(flag):print(picture+"capture succeess!")else:# print(picture+"capture fail!")passos.remove(Desktop+'screen.png')def main(self):while(True):try:self.Image_Compare(Picture)except:  print("锁屏了,省电成功,呜呜")# 自动锁屏大概时间间隔是5,6分钟,延时时间设为一分钟sleep(60*1)

3. 生成.exe文件

pyinstaller是个好东西,直接打包,pip3 install pyinstaller即可食用,用vs code使用的时候,可能会存在问题,我的问题是多个py版本冲突了。打包生成的exe,只要把图片等文件放到exe的参考目录里面,就可以随意使用了,如果要换台电脑,即使没有pip3的环境,没有安装相应的库,也是可以使用的,因为pyinstaller已经打包完毕了。

# -F表示打包成一个exe文件,没有杂七杂八的
# -w 表示没有cmd控制台,看不到print的输出了
py -3.10 -m PyInstaller -F -w your.py

三、坑点

1. 原因

双击生成的exe文件,因为使用pyinstaller加了-w参数(不加的话会有终端框出来,太影响了),所以启动程序之后,不会有终端黑框出来,也就看不到print的输出了,当然这只是小问题,只要能拒绝锁屏就行。

但这玩意儿实在太安静了,完全没有提示框,没有桌面图标显示,很多时候都不知道自己到底有没有运行程序,只能到任务管理器里面,慢慢的找才能看的到。。。有的时候忘记了,还会启动好几个程序,感觉占用的“大量”系统资源,强迫症难受

2.解决方案

于是乎,我想着能不能用pyqt写个简单的界面,按钮点击就启动拒绝锁屏功能,这样还能有个图标挂着,随时能看到。

3. 安装引入库

pip3 install pyqt5
pip3 install PyQt5-tools -i http://pypi.douban.com/simple --trusted-host=pypi.douban.com
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

作为一个二次元用户,背景、图标啥的要安排上,先上一个截止目前的效果:

目前已实现功能:
1. 拒绝省电
2. 系统托盘图标和弹窗
3. 界面右键列表
4. 音乐播放器
5. 靠边隐藏
6. 背景圆圈线条美化
7. 宠物挂件
8. 按钮点击抖动窗口
9. 开机动图
10. 气泡弹窗提示
10.窗口淡入淡出
11. 。。。

参考的大神比较多,感谢大家无私的奉献
主要是UI部分:https://zmister.com/archives/477.html
美化功能部分:https://github.com/PyQt5/PyQt
桌面宠物部分:https://zhuanlan.zhihu.com/p/376288986

关于我想写个脚本,最后却搞了个桌面宠物这件事(二)相关推荐

  1. 关于我想写个脚本,最后却搞了个桌面宠物这件事(一)

    前言 项目进行到快收尾的阶段,芯片及软硬件平台需要调试,调试测试的过程中都是大量的重复性工作,将这些繁琐的流程化的东西交给外包,仍然需要告诉他们什么时候该点击界面上的什么按钮,需要手动的创建文件夹,移 ...

  2. 关于我想写个脚本,最后却搞了个桌面宠物这件事(三)

    前言 在第二篇文章中,通过了python调用opencv的模板匹配函数干掉了自动锁屏功能,拒绝省电.然后因为没有提示框的问题准备用pyqt将功能纳入界面当中.不知道是不是很多人和我一样,就是不太喜欢用 ...

  3. 关于在寒假用两周从零手写包含模拟着色器的软渲染器这件事

    当你重新踏上旅途之后,一定要记得旅途本身的意义. --巴巴托斯 轮子哥说过,编译原理,操作系统,图形学是程序员的三大浪漫,既然以后想从事游戏方面的工作,造这个轮子是不可避免的.其实早在本科的时候我就有 ...

  4. 关于我写了三万字博客后悔了好久这件事之第二个三万字GUI(swing)

    目录 简介: 使用Swing的优势: Swing的特征: Swing基本组件的用法 Swing组件层次 AWT组件的Swing实现 简单了解swing(JFrame) 弹窗 标签: 面板 按钮 3.6 ...

  5. 《5分钟商学院》4周年:写了100万字,我学到的3件事

    2016年9月25日,<5分钟商学院>第一次在得到APP上与大家见面. 到今天,正好四周年,有超过40万学员加入. 心中感慨万分. 借此机会,分享一篇2018年,我在更新完2季5商之后,给 ...

  6. 不想写脚本清理 mongodb 中的垃圾数据,ttlIndex 能帮到你!

    mongodb一直都在不断的更新,不断的发展,那些非常好玩也非常实用的功能都逐步加入到了mongodb中,这不就有了本篇对ttlindex的介绍,刚好我们的生产业务场景中就有一个案例... 一:案例分 ...

  7. 抢课脚本从想写到放弃

    最近想写一个抢课脚本,但是会的东西还不够,等我学会了这些技术,可能我已经不需要抢课了(留下来无助的泪水) 抢课脚本最基础的就是按键精灵了 首先要弄明白的是服务器,HTTP协议,然后还要用C++,pyt ...

  8. python写的游戏怎么给别人玩-用python写游戏脚本原来这么简单

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成.游戏脚本其实并 ...

  9. python游戏最简单代码-用python写游戏脚本原来这么简单

    前言 最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西. 当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成.游戏脚本其实并 ...

最新文章

  1. 与英特尔抢市场,英伟达的数据中心业务能增长到多大?
  2. 如何访问webService接口
  3. Goods:图书模块按分类查询各层实现
  4. 字符统计2_JAVA
  5. jfinal poi
  6. DDMS连接bluestacks找不到设备
  7. 排序系统 c语言程序设计,c语言程序设计(排序算法).doc
  8. 从我的客户谈营销公司怎样将创业企业做大的
  9. SVN工具将本地代码导入SVN资源库
  10. python itchat_Python使用itchat获取微信好友
  11. LC - P03 机器人大冒险
  12. harmonyos演示,HarmonyOS 2.0 跨屏演示:手机编辑内容跨到平板,自动优化排版
  13. python报告的创新点_课题研究中的拟创新点是什么
  14. Windows11无法打开Windows安全中心(需要使用新应用打开此windowsdefender链接)
  15. NAT 技术最全详解 : 换个马甲就能上网
  16. android mapview 自定义地图标注,关于Android集成高德地图的那些事儿...地图标注Marker 、Poi 搜索...
  17. 产品机会:痛点,痒点,爽点
  18. 东南大学计算机学院程茜雅,满满的黑科技,这份录取通知书火了!
  19. 手机怎么把证件照缩小到100k以下?手机照片如何压缩变小?
  20. 广点通,网盟广告Sdk 一键集成!Android

热门文章

  1. 【git】使用git链接远程gitee仓库并提交
  2. matlab和ccd相机通讯,串口通讯在CCD相机系统中的应用
  3. 火车头怎么采集头条规则写法
  4. 2020总结:软件工程,由分析需求到立项到测试再到?
  5. dockers 拷贝
  6. 如何将本地图片转成图片链接
  7. vue 仿B站下拉刷新上拉加载
  8. H3 BPM 端到端流程解决方案 (附H3 BPM软件下载地址)
  9. html5 怎么插指南针,分享 HT 实用技巧:实现指南针和 3D 魔方导航
  10. 诚之和:EDG夺冠,年轻人为何狂欢?