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

使用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 pgREFREASH_BUTTON_POS = (93, 62)
WEBPAGE_POS = ((140, 20),(380, 20)
)def refresh_webpage(webpage_position):x, y = webpage_positionpg.moveTo(x, y, duration=0.5)pg.leftClick(duration=0.05)pg.sleep(0.5)x, y = REFREASH_BUTTON_POSpg.moveTo(x, y, duration=0.5)pg.leftClick(duration=0.05)pg.sleep(0.5)def main():pg.FAILSAFE = Falsecnt = 0while True:cnt += 1pg.sleep(5)for pos in WEBPAGE_POS:refresh_webpage(pos)pg.sleep(5)if __name__ == '__main__':main()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 产品经理面试整理-准备个人案例
  • MySQL关卡任务书
  • 在 Flutter 开发中如何选择状态管理:Provider 和 GetX 比较
  • notepad++的json查看
  • 【通俗易懂】知识图谱增强 RAG 思路 和 实现方案
  • HTTP中的301、302实现重定向
  • css禁止图片保存,CSS中的图片保存方法
  • 9月22日正式签约,树莓集团落子海南!
  • Spring MVC 全局异常 总结
  • 力扣题解1014
  • C语言从头学62——学习头文件stdlib.h(一)
  • 加固与脱壳01 - 环境搭建
  • async await执行顺序
  • 11周年 | 初心不改,焕新前行,奔赴下一个10年!
  • Unity Debug时出现请选择unity实例
  • [译]CSS 居中(Center)方法大合集
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • AWS实战 - 利用IAM对S3做访问控制
  • Brief introduction of how to 'Call, Apply and Bind'
  • codis proxy处理流程
  • dva中组件的懒加载
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • JS笔记四:作用域、变量(函数)提升
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • nodejs调试方法
  • React系列之 Redux 架构模式
  • spring boot 整合mybatis 无法输出sql的问题
  • V4L2视频输入框架概述
  • windows下使用nginx调试简介
  • 从0实现一个tiny react(三)生命周期
  • 对象管理器(defineProperty)学习笔记
  • 聊聊directory traversal attack
  • 如何使用 JavaScript 解析 URL
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 详解移动APP与web APP的区别
  • 栈实现走出迷宫(C++)
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #includecmath
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)Eureka服务搭建,服务注册,服务发现
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)大型网站架构演变和知识体系
  • .a文件和.so文件
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET Project Open Day(2011.11.13)
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net 无限分类
  • .NET/C# 使窗口永不获得焦点