当前位置: 首页 > article >正文

使用python写按键程序

主要用到的python库是PyAutoGUI,输入一下命令安装即可。

pip install pyautogui

PyAutoGUI官网:https://pyautogui.readthedocs.io/en/latest/

下面做一些功能介绍,介绍部分的内容均来自官网。

部分函数简介

注意:下面函数大部分没有把参数列全,只列了常用的一些参数。

  • size():获取显示器的分辨率信息,返回两个整数(width, height)
screenWidth, screenHeight = pyautogui.size()
  • position():返回当前鼠标位置信息,也是两个整数(x, y)
    • PS:写按键程序的时候经常需要获取坐标信息,很多截图功能附带坐标信息,但假如手边没有趁手的截图工具,那可以用这条命令凑合一下,把鼠标移动到目标位置,然后执行该命令。
currentMouseX, currentMouseY = pyautogui.position()
  • moveTo(x=None, y=None, duration=0.0):移动鼠标到(x, y)位置,duration是指花多长时间移动过去,单位是秒,默认是0,也就是瞬间移动到。

    • 注意:如果设置有屏保,瞬移不会刷新屏保的触发时间,也就是说过上一会就回进入屏保状态,如果不想进入屏保,那就要给duration设置个大于0的数值。
  • move(xOffset=None, yOffset=None, duration=0.0):是moveRel()函数的替代名称,作用是将鼠标从当前位置出发,移动(xOffset, yOffset)的距离,duration的作用同moveTo

  • click(x=None, y=None, clicks=1, interval=0.0, button=PRIMARY, duration=0.0):点击一下,点击的意思就是按下并快速松开。

    • 如果设置了(x, y),那就移动到该位置点击,如果不设置(x,y),那就是在当前位置点击一下。
    • clicks表示点击次数。
    • interval表示点击间隔,当clicks大于1时才有用。
    • button表示点击哪个键,取值有[LEFT, MIDDLE, RIGHT, PRIMARY, SECONDARY],PRIMARY和SECONDARY因鼠标设置而不同,对于常用的右手设置,PRIMARY就是左键,而左手鼠标的话,PRIMARY就是右键。
    • duration是移动到(x, y)所花的时间。
  • doubleClick(x=None, y=None, interval=0.0, button=LEFT, duration=0.0)

  • leftClick(x=None, y=None, interval=0.0, duration=0.0):左键点击一次,是对click()在特定参数下的封装。

    • 这个函数里的interval比较让人迷惑,因为次数写死了是1,所以interval感觉没什么用。
  • rightClick(x=None, y=None, interval=0.0, duration=0.0)

  • write(message, interval=0.0):是typewrite()函数的替代名称,作用是输入一段字符串,即message。

  • keyDown(key):按下一个键。

  • keyUp(key):松开一个键。

  • press((keys, presses=1, interval=0.0):点击按键并松开,注意keys用的是复数,所以它可以是多个值。press相当于一系列keyDown()和keyUp的组合。

    • presses:点击次数
    • interval:presses的间隔。注意此interval只作用在presses之间,不作用于keys之间。
  • hold(keys):创建一个按下一系列键的环境。

    • keyDown,keyUp,press,hold需要结合例子才比较容易理解,下面一系列代码的效果是等同的,都是实现按下shift的同时点击三次左方向键,然后松开shift。
    pyautogui.keyDown('shift')  # hold down the shift key
    pyautogui.press('left')     # press the left arrow key
    pyautogui.press('left')     # press the left arrow key
    pyautogui.press('left')     # press the left arrow key
    pyautogui.keyUp('shift')    # release the shift key
    
    pyautogui.keyDown('shift')  # hold down the shift key
    pyautogui.press(['left', 'left', 'left'])
    pyautogui.keyUp('shift')    # release the shift key
    
    with pyautogui.hold('shift'):
        pyautogui.press(['left', 'left', 'left'])
    
  • hotKey():按下组合键并松开,组合键以顺序按下,以倒序松开。

    pyautogui.hotkey('ctrl', 'c')
    
  • screenshot(imageFilename=None, region=None):对屏幕进行截屏,返回一个图像,返回的图像是PIL.Image对象。

    • region如果是None就对整个屏幕截屏,如果不想截整个屏幕,那么region的格式是4个数字,分别表示(left, top, width, height)
  • scroll(clicks, x=None, y=None):控制鼠标滚轮的滚动。clicks表示滚动次数,如果>0表示向上滚动,如果<0表示向下滚动,(x, y)如果设置的话就移动到该位置并滚动。

    pyautogui.scroll(10)   # scroll up 10 "clicks"
    pyautogui.scroll(-10)  # scroll down 10 "clicks"
    pyautogui.scroll(10, x=100, y=100)  # move mouse cursor to 100, 200, then scroll up 10 "clicks"
    
  • FAILSAFE:这不是个函数,该参数的意思是,当把鼠标移动到某个位置时会把程序挂掉(默认是屏幕左上角),该参数的默认设置为(做调试的时候还是很有用的,不然在密集的自动操作下,你可能都没有机会手动终止程序):

    FAILSAFE = True
    FAILSAFE_POINTS = [(0, 0)]
    

    如果担心不小心碰到鼠标让程序挂掉,那就把参数设置成False:

    pyautogui.FAILSAFE = False
    

key的名称列表

跟键盘按键相关的函数,如keyDown(), keyUp(), press(), hotkey()等需要接收key的名称作为参数,key的名称是字符或者字符串,罗列如下:

['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(',
')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`',
'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace',
'browserback', 'browserfavorites', 'browserforward', 'browserhome',
'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear',
'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete',
'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10',
'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20',
'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9',
'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja',
'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail',
'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack',
'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6',
'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn',
'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn',
'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator',
'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab',
'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen',
'command', 'option', 'optionleft', 'optionright']

示例

一个自动刷新网页的小程序如下(仅通过moveTo和leftClick两个函数实现):
注意不同分辨率的屏幕,或者浏览器本身的一些size设置不同的情况下,按钮坐标会不一样,因此可能需要改一下下面POS(position)相关的参数。

# -*- coding: utf-8 -*-
import pyautogui as pg

REFREASH_BUTTON_POS = (93, 62)
WEBPAGE_POS = (
    (140, 20),
    (380, 20)
)


def refresh_webpage(webpage_position):
    x, y = webpage_position
    pg.moveTo(x, y, duration=0.5)
    pg.leftClick(duration=0.05)
    pg.sleep(0.5)

    x, y = REFREASH_BUTTON_POS
    pg.moveTo(x, y, duration=0.5)
    pg.leftClick(duration=0.05)
    pg.sleep(0.5)


def main():
    pg.FAILSAFE = False
    cnt = 0
    while True:
        cnt += 1
        pg.sleep(5)
        for pos in WEBPAGE_POS:
            refresh_webpage(pos)
            pg.sleep(5)


if __name__ == '__main__':
    main()


http://www.kler.cn/news/317167.html

相关文章:

  • Vue学习(五)生命周期、组件
  • IT行业的现状与未来发展趋势
  • 数据库主备副本物理复制和逻辑复制对比
  • 除猫毛用粘毛器还是宠物空气净化器?希喂/米家/352/范罗士/有哈空气净化器对比
  • vue3<script setup>中computed
  • ELK环境部署
  • Codeforces Round 971 (Div. 4) G1. Yunli‘s Subarray Queries (easy version)
  • 2024年中国科技核心期刊目录(科普卷)
  • 快速理解TCP协议(三)——TCP协议的三次握手与四次挥手
  • 苍穹外卖学习笔记(九)
  • 【Webpack--012】提取单独的CSS文件压缩CSS文件
  • leetcode:验证回文串
  • 综合时如何计算net delay?
  • 【最基础最直观的排序 —— 冒泡排序算法】
  • 公安局党建平台建设方案和必要性-———未来之窗行业应用跨平台架构
  • 电动车车牌识别系统源码分享
  • 【LIO-SAM】LIO-SAM论文翻译(2020年)
  • 【揭秘Java】线程安全中的有序性之谜
  • 【Hive 运维】JDBC使用Hive UDF:Hive UDF打通hiveserver2
  • idea多模块启动
  • uniapp 动态修改input样式
  • Linux bash特性:
  • 机器人上的DPDK使用思考
  • Android Retrofit源码分析(一):Retrofit是什么?和OkHttp的区别是什么?为什么需要他?
  • 计算机网络34——Windows内存管理
  • 速盾:网站使用 CDN 加速
  • Redis的分布式部署
  • AI大模型日报#0923:李飞飞创业之后首个专访、华为云+腾讯音乐发布昇腾适配方案
  • 基于MaxScale搭建MariaDB读写分离集群的方法【2024年最新版】
  • 深度学习(一)——CMC特刊推荐