python使用pynput实现划词复制

参考博客

Windows系统环境下Python脚本实现全局“划词复制”功能 - 缘起花渊 - 博客园 (cnblogs.com)https://www.cnblogs.com/yqmcu/p/11227206.htmlpynput库的官方文档

pynput Package Documentation — pynput 1.7.6 documentationicon-default.png?t=M3K6https://pynput.readthedocs.io/en/latest/​​​​​​​参考的博客实现了划词复制,但是看了下他的代码写的有点复制混乱,监听准确率并不高且不太容易理解。

实际监听鼠标的划词操作逻辑很简单:

记录下鼠标左键按下时的位置,当鼠标左键松开时,记录下鼠标左键松开的位置,如果按下的位置和松开的位置不一致,说明鼠标正在划词。

from pynput.mouse import Listener, Button
from pynput.keyboard import Key, Controller

class AutoCopier():
    __press_xy = (0, 0)  # 私有变量 鼠标左键按下时的位置

    def __init__(self):
        self.keyboard = Controller()                     # 初始化键盘控制器
        self.listener = Listener(on_click=self.on_click) # 初始化鼠标监听器
        self.listener.start()                            # 开启鼠标监听器线程

    # 点击函数
    def on_click(self, x, y, button, pressed):           
        if button == Button.left:             # 左键点击
            if pressed:                       # 左键按下
                self.__press_xy = (x, y)      # 记录当前鼠标位置
            else:                             # 左键松开           
                if self.__press_xy != (x, y): # 按下位置和松开位置不一致
                    self.copy()               # 说明操作是划词,执行复制函数
    
    # 复制函数
    def copy(self): 
        with self.keyboard.pressed(Key.ctrl): # 按下ctrl,with语句结束后自动松开
            self.keyboard.press('c')          # 按下c
            self.keyboard.release('c')        # 松开c

    # 等待线程终止
    def wait_to_stop(self):
        self.listener.join()

# for test
if __name__ == '__main__':
    at = AutoCopier()
    at.wait_to_stop()

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Toblerone_Wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值