使用python写按键程序

ops/2024/9/24 13:52:32/

主要用到的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)相关的参数。

python"># -*- 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()

http://www.ppmy.cn/ops/115316.html

相关文章

Ceph容器化最佳实践_超融合架构

主机规划 # 主机组件规划 node1 #MON、MGR、OSD、Bootstrap、监控堆栈组件 node2 #MON、MGR、OSD node3 #MON、OSD# 算力规划 实验主机均为虚拟机&#xff0c;每台4C8GB。# 网络设备规划&#xff08;使用虚拟机则配置虚拟网卡&#xff0c;物理机则配置交换机路由器&#xf…

Android15之编译Cuttlefish模拟器(二百三十一)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

【Java】反射, 枚举, Lambda

反射, 枚举, Lambda 反射反射的概念反射相关的类初识Class类类对象的获取反射使用反射的优点和缺点 枚举初识枚举枚举对象的使用Enum类枚举与反射枚举的优缺点 Lambda表达式概念介绍初步使用其他情况使用变量捕获机制为什么需要Lambda表达式Lambda表达式的优缺点Lambda表达式的…

HTB-GreenHorn 靶机笔记

GreenHorn 靶机笔记 概述 GreenHorn 是 HTB 上的一个 linux easy 难度的靶机&#xff0c;主要是通过信息搜集和代码审计找到对我们有用的信息。其中还包含了对pdf文件的修复技术 靶机地址&#xff1a;https://app.hackthebox.com/machines/GreenHorn 一丶 nmap 扫描 1&…

后端常用的mybatis-plus方法以及配合querywapper使用

目录 一、插入数据 save方法 二、删除操作 removeById方法 三、更新操作 updateById方法 四、查询操作 selectById方法 五、条件构造器QueryWrapper的更多用法 1.比较操作符 2.逻辑操作符 3.模糊查询 4.空值判断 一、插入数据 save方法 save(T entity):向数据库中插入…

GAN如何使用的 Jensen-Shannon 散度

GAN 在其原始形式中使用 Jensen-Shannon 散度&#xff08;JS 散度&#xff09; 来衡量生成器生成的分布与真实数据分布之间的差异。这是在 GAN 的对抗性损失函数设计中自然而然出现的。具体来说&#xff0c;GAN 的目标是让生成器 G G G 生成的分布 P g P_g Pg​ 尽可能接近真…

npm run build报Cannot find module错误的解决方法

目录 一、问题描述二、解决方法一、问题描述 执行 npm run build 报 Cannot find module 错误: npm run build> vite-vue3@0.0.0 build > vite buildfailed to load config from D:\Workspaces\PhpProjects\jjj-edu-master\jjj_edu_admin\vite.config.js error during…

若依Nodejs后台、实现90%以上接口,附体验地址、源码、拓展特色功能

背景 前端的宝子们代码写累了吗&#xff1f;那就一起研究下后端吧&#xff01; 体验地址&#xff1a;http://106.54.233.63:5000 Gitee源码&#xff1a;https://gitee.com/ruirui-study/ruoyi_nodejs_open 本项目的前端基于若依Vue3.0版本&#xff0c;后端是基于MidwayJs框…