Mac监控键盘输入并执行动作

news/2024/4/20 8:14:42/文章来源:https://blog.csdn.net/NetRookieX/article/details/129225542

最新内容在我的另一个博客:Mac监控键盘输入并执行动作




背景

电脑的安全是非常重要的,特别是里面的敏感数据,若是被有心之人利用,那后果不堪设想。
所以我们部门定下了一个规矩,谁离开工位要是不锁屏,就可以在部门群发送一个消息:我请大家吃鸡翅。

oh,技术出身怎么可以让这种事情发生。

简介

最新代码我放到了这里:https://github.com/GuoFlight/ListenKey ,欢迎Star与交流。

代码逻辑是,监听到指定的字符串就会「执行动作」。

代码实现

执行环境:Mac+Python3.(Windows也可,但要修改小部分代码)
仓库中我还实现了启停脚本control.sh。这里只介绍主要逻辑。
将以下代码后台执行,当键盘输入"jichi", “qingdajia”, “dajia”, "weizheng"这些字符串时,Mac就会锁屏。

#!/usr/bin/python3
from pynput.keyboard import Listener
import os
import time
import signal
from multiprocessing import Pool#####################################
# 程序作用:监听键盘,若输入了指定的字符串,则执行相应的动作
# 作者:京城郭少
#####################################class ListenKey:def __init__(self, listenStr="", actionFunc=None):self.listenStr = listenStrself.actionFunc = actionFuncself.index = 0def on_press(self, key):# print("监听到了",key)  # DEBUGif self.listenStr == "" or self.actionFunc == None:returnpressKey = Nonetry:pressKey = key.charexcept AttributeError:pressKey = keyif pressKey == self.listenStr[self.index]:# print("本次按键符合条件")  # DEBUGif self.index == len(self.listenStr) - 1:self.index = 0self.actionFunc()now = time.strftime("%Y-%m-%d  %H:%M:%S", time.localtime())print("【%s】执行动作" % (now),flush=True)  # DEBUGelse:self.index = (self.index + 1) % (len(self.listenStr))else:self.index = 0def on_release(self, key):returndef start_listen(self):# print("开始监听")       #DEBUGwith Listener(on_press=self.on_press, on_release=self.on_release) as listener:listener.join()#指定动作
def actionFunc():#os.system("shutdown -s now")os.system("osascript -e 'tell application \"System Events\" to key code 12 using {control down,command down}'")#print("hello",flush=True)#处理信号
def handle_exit(sig, stack_frame):print('eixt',flush=True)p.terminate()exit(0)if __name__ == '__main__':keywords = ["jichi", "qingdajia", "dajia", "weizheng"]signal.signal(signal.SIGINT, handle_exit)signal.signal(signal.SIGQUIT, handle_exit)signal.signal(signal.SIGTERM, handle_exit)# signal.signal(signal.SIGKILL, handle_exit)listenKey = []p = Pool(6)  # 最多同时执行6个进程for i in keywords:listenKey.append(ListenKey(i, actionFunc))for i in listenKey:p.apply_async(i.start_listen)  # 在进程池中添加进程p.close()p.join()  # 等待子进程结束再往下执行

京城郭少


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_74548.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

@ConfigurationProperties在方法上的使用

文章目录1. 前言2. 先说结论3. 代码解释1. Component ConfigurationProperties2. EnableConfigurationProperties ConfigurationProperties3. Bean ConfigurationProperties1. 前言 在学习spring的时候,ConfigurationProperties应该经常被使用到,作用…

NCRE计算机等级考试Python真题(二)

第二套试题1、关于算法的描述,以下选项中错误的是A.算法具有可行性、确定性、有穷性的基本特征B.算法的复杂度主要包括时间复杂度和数据复杂度C.算法的基本要素包括数据对象的运算和操作及算法的控制结构D.算法是指解题方案的准确而完整的描述正确答案: …

Android 网络框架——Retrofit源码精析

众所周知,Retrofit是OkHttp的封装,APP对网络交互部分的实现基本上都是RxJavaRetrofitOkHttp架构(或协程RetrofitOkHttp),可以说,Retrofit已经广为人知。本文主要介绍Retrofit主线源码实现机制,及…

在线文档技术-编辑器篇

这是在线文档技术的第二篇文章,本文将对目前市面上所有的主流编辑器和在线文档进行一次深入的剖析和研究,从而使大家对在线文档技术有更深入的了解,也让更多人能够参与其开发与设计中来。 注意:出于对主流文档产品的尊重&#xf…

基础数据结构--线段树(Python版本)

文章目录前言特点操作数据存储updateLazy下移查询实现前言 月末了,划个水,赶一下指标(更新一些活跃值,狗头) 本文主要是关于线段树的内容。这个线段树的话,主要是适合求解我们一个数组的一些区间的问题&am…

Xcode Developer Document 开发者文档

总目录 iOS开发笔记目录 从一无所知到入门 文章目录IntroDeveloper Documentation 打开方式菜单栏点击 | 快捷键方式另一种打开方式Intro 2016年我在学校学Java的时候,要查某个Java类/方法的用法还得自己手动下载一种.chm格式的开发文档文件&#xff0c…

Oracle-RAC集群主机重启问题分析

问题背景: 在对一套两节点Oracle RAC19.18集群进行部署时,出现启动数据库实例就会出现主机出现重启的情况,检查发现主机重启是由于节点集群被驱逐导致​。 问题: 两节点Oracle RAC19.18集群,启动数据库实例会导致主机出现重启。 问题分析: 主机多次出现…

DFT基本入门介绍

1.什么是DFT?2.为什么要做DFT?3.“测试”与“验证”的区别4.DFT的核心技术1)扫描路径设计(Scan Design)2)内建自测试(Bist)3)JTAG4)ATPG5.DFT工程师的岗位职责随着芯片的制程越来小(5nm), 芯片的…

【奶奶看了也不会】AI绘画 Mac安装stable-diffusion-webui绘制AI妹子保姆级教程

1.作品图 2.准备工作 目前网上能搜到的stable-diffusion-webui的安装教程都是Window和Mac M1芯片的,而对于因特尔芯片的文章少之又少,这就导致我们还在用老Intel 芯片的Mac本,看着别人生成美女图片只能眼馋。所以小卷这周末折腾了一天&#…

Android 分区和内存监控

Andorid之所以是分区,是因为各自有对应的功能和用途的考量,可以进行单独读写和格式化。Android 设备包含两类分区:一类是启动分区,对启动过程至关重要。一类是用户分区,用于存储与启动无关的信息。启动分区boot 分区一…

数据库之高级查询

注意:第一个包含空,第二句不包含空注意:第二句是错的,聚合函数不能出现在where中。注意:相当于,按照分组属性,求出每个组的聚合函数值,所以肯定不能放单个属性有冲突with rollup是最…

一文带你搞定线程池原理

1.使用线程池的意义何在?项目开发中,为了统一管理线程,并有效精准地进行排错,我们经常要求项目人员统一使用线程池去创建线程。因为我们是在受不了有些人动不动就去创建一个线程,使用的多了以后,一旦报错就…

怎么依靠网络赚钱,网上可以做什么副业

如今,网上赚钱已经成为许多人职业生涯的选择之一。网上有很多可靠的兼职,让你在家里轻松赚钱。今天给大家推荐五份可靠的网上兼职。一、怎样选择可靠的网络兼职可靠的网络兼职一般是指在家通过网络平台完成兼职任务,完成任务后即可获得报酬。…

学习python第一天---前缀和

一、3956.截断数组(前缀和)二、前缀和(前缀和)[0]list(map(int,input().split()))三、子矩阵的和(前缀和)range(1,n1)四、K倍区间(前缀和)五、激光炸弹(前缀和&#xff0…

Spring Cache的使用--快速上手篇

系列文章目录 分页查询–Java项目实战篇 全局异常处理–Java实战项目篇 完善登录功能–过滤器的使用 更多该系列文章请查看我的主页哦 文章目录系列文章目录前言一、Spring Cache介绍二、Spring Cache的使用1. 导入依赖2. 配置信息3. 在启动类上添加注解4. 添加注解4.1 CacheP…

在Angular项目中引入NG-ZORRO

在Angular项目中引入NG-ZORRO1.前置2.安装NG-ZORRO并进行初始化配置3.引入样式4.引入组件1.前置 首先创建一个angular项目:angular创建一个新项目的步骤 这是我项目的结构: 2.安装NG-ZORRO并进行初始化配置 安装NG-ZORRO:cd 到当前项目位…

智能算法实现PID智能车控制系统

智能算法实现PID智能车控制系统可在微信公众号 *高级嵌入式软件* 里回复 *智能算法* 查看完整版文章摘要关键词第一章绪论1.1智能车概述1.2智能PID研究现状1.3本文工作第二章 PID控制简介第三章 内模PID简介3.1 内模PID控制第四章内模智能PID智能车控制系统设计4.1 系统设计4.2…

《MySQL学习》 表中随机取记录的方式

一.初始化测试表 创建表 words CREATE TABLE words ( id int(11) NOT NULL AUTO_INCREMENT, word varchar(64) DEFAULT NULL, PRIMARY KEY (id)) ENGINEInnoDB;插入测试数据 create procedure idata()begin declare i int; set i 0; while i<10000 do insert into words…

第二节类型转换、运算符

类型转换 自动类型转换&#xff1a; 类型小的变量可以赋值给大的类型变量。 表达式的自动类型转换&#xff1a; byte short char在表达式中是当做 int计算的。 强制类型转换&#xff1a; 大类型的变量转化为小类型的变量。 注&#xff1a;浮点型转换为整数是直接丢掉小数部…

尚硅谷nginx基础

nginx1. nginx安装1.1版本区别1.2安装步骤1.3 启动nginx1.4关于防火墙1.5 安装成系统服务1.6 配置nginx环境变量2. nginx基本使用2.1 基本运行原理2.2 nginx配置文件2.2.1 最小配置2.2.1.1 基本配置说明2.3 虚拟主机2.3.1域名、dns、ip地址的关系2.3.2IP地址和DNS地址的区别2.3…