首页 > 其他分享 >Mac监控键盘输入并执行动作

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

时间:2023-02-26 12:23:19浏览次数:43  
标签:__ index signal actionFunc listenStr Mac 键盘输入 监控 self

背景

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

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 = listenStr
        self.actionFunc = actionFunc
        self.index = 0

    def on_press(self, key):
        # print("监听到了",key)  # DEBUG
        if self.listenStr == "" or self.actionFunc == None:
            return
        pressKey = None
        try:
            pressKey = key.char
        except AttributeError:
            pressKey = key
        if pressKey == self.listenStr[self.index]:
            # print("本次按键符合条件")  # DEBUG
            if self.index == len(self.listenStr) - 1:
                self.index = 0
                self.actionFunc()
                now = time.strftime("%Y-%m-%d  %H:%M:%S", time.localtime())
                print("【%s】执行动作" % (now),flush=True)  # DEBUG
            else:
                self.index = (self.index + 1) % (len(self.listenStr))
        else:
            self.index = 0

    def on_release(self, key):
        return

    def start_listen(self):
        # print("开始监听")       #DEBUG
        with 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()  # 等待子进程结束再往下执行

京城郭少


标签:__,index,signal,actionFunc,listenStr,Mac,键盘输入,监控,self
From: https://www.cnblogs.com/NetRookieX/p/17156442.html

相关文章

  • c: machine0 - 机器语言的模型机
    c: machine0-机器语言的模型机    一、源码1[wit@eaglesrc]$catmachine0.c2#include<stdio.h>3#include<stdlib.h>4#include<string.h>5......
  • mac brew安装报错curl: (60) SSL certificate problem: certificate has expired
    curl:(60)SSLcertificateproblem:certificatehasexpiredMoredetailshere:https://curl.haxx.se/docs/sslcerts.html这个问题原因就是证书到期了,重新下载下证......
  • 轻松保障万级实例,vivo服务端监控体系建设实践
    经过几年的平台建设,vivo监控平台产品矩阵日趋完善,在vivo终端庞大的用户群体下,承载业务运行的服务数量众多,监控服务体系是业务可用性保障的重要一环,监控产品全场景覆盖生......
  • zabbix磁盘SMART监控
    1、安装Smartmontools需要Smartmontools7.1版本及以上SmartmontoolsPackages下载页面Smartmontools7.1源码下载centos7#安装smartmontoolsyum-yinstal......
  • zabbix监控dell服务器ipmi
    ipmi监控IPMI是计算机系统的远程"关闭"或“带外”管理的标准接口。它可以独立于操作系统直接从所谓的“带外”管理卡监视硬件状态。在进行操作前服务器需提前配置好ipmi口,......
  • MacOS下载钉钉直播回放视频的Python最新解决方案
    tags:PythonMacOSTips写在前面之前写过一篇关于用Charles抓包下载钉钉直播回放视频的方法,那会还是可以直接通过​​FFmpeg​​​下载​​m3u8​​​链接并且直接合并的......
  • Lightroom Classic for mac(Lrc2021) v10.4 激活版
    Lightroom Classic2021mac中文版是一款以后期制作为重点的图形工具软件,其增强的校正工具、强大的组织功能以及灵活的打印选项可以帮助您加快图片后期处理速度,将更多的时......
  • 【macOS】xattr命令简介
    ✨扩展文件属性扩展文件属性是文件系统功能,使用户能够将计算机文件与文件系统不解释的元数据相关联,而常规属性具有由文件系统严格定义的目的(例如权限或创建和修改时间的记......
  • 苹果mac电脑压缩照片怎么压缩 苹果压缩照片的软件
    当我们日常需要将图片进行压缩变小压缩时,如果是Mac电脑应该如何操作呢?本文介绍苹果压缩照片怎么压缩,和苹果压缩照片的软件。BetterZip5下载地址:https://souurl.cn/xAHLY9一......
  • SpringBoot31 - 监控
    监控​ 在说监控之前,需要回顾一下软件业的发展史。最早的软件完成一些非常简单的功能,代码不多,错误也少。随着软件功能的逐步完善,软件的功能变得越来越复杂,功能不能得到有......