win操作(1)-键盘鼠标输入
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了win操作(1)-键盘鼠标输入相关的知识,希望对你有一定的参考价值。
参考技术A python比较底层的鼠标键盘操作使用 win32api 包,使用这个包需要 win32con 配合,后者封装了几乎所有windos操作定义的宏,比如:
第一个参数dwflags
第二个参数是x坐标
第三个参数是y坐标
第四个参数是一般是配合 MOUSEEVENTF_WHEEL使用,默认值是120代表一滚多少距离,负数值是反向滚
第五个参数一般不需要用到,代表一下扩展信息,32位,十分不常用
一般教程会告诉你鼠标操作包括按下和放开,然后后面的那四个参数不重要,记住这样用就可以了(-_-不重要~)。强迫症的人会纠结x,y的值为什么0是代表当前鼠标的位置,而不是绝对值(0,0);后面那两位0,0又是不是某个win32con定义的常量?但是如果他们这样举例可能就比较清晰明白了。
没错包括后面要讲到的keybd_event但不仅限于它,很多常量仅仅是代表布尔值False,代表不要求这参数(这才是一堆0的意义,它一般是取默认值或者当前值的意思)
第一个参数是vk_code是按键映射的编码
https://docs.microsoft.com/zh-cn/windows/desktop/inputdev/virtual-key-codes
各个按键对应的vk_code可以看上面的网址。
第二个参数是扫描码,又是一个映射级别的编码,一般教程会说可以设为0(但是这里同样是False的意思)
这个编码可以通过win32api.MapVirtualKeyA函数模拟,uMapType一般选0代表MAPVK_VK_TO_VSC,还有其他值,意思看英文可以猜到。
MAPVK_VK_TO_CHAR -> 2
MAPVK_VSC_TO_VK -> 1
MAPVK_VSC_TO_VK_EX -> 3
第三个参数代表操作,有KEYEVENTF_EXTENDEDKEY(1)和KEYEVENTF_KEYUP(2)两种模式,第一种代表一直按住该键,注意这里是一直按住,即使后面紧跟着keyup也不会生效,第二种就是名字的意思了,就是放开按键。其实这里还有第三种默认参数,就是当这个值等于False的时候,代表按下按键,这种按下是可以keyup的,所以经常会见到这样写代表某个按键的输入操作。
第四个参数是扩展参数,基本不是写原生C的话可以不考虑这个参数了。完整的键盘模拟操作如下:
还有很多鼠标键盘操作的api可以参考
https://docs.microsoft.com/en-us/windows/win32/api/_inputdev/
pyautogui模拟鼠标键盘操作
安装pyautogui库
快捷键win+R调出“运行”命令窗口,输出cmd
在cmd命令窗口输出:
pip install pyautogui
等待安装,直到完成
如何使用
- 打开python的IDLE
- 导入库:
import pyautogui as pg
- 按需输入命令即可
命令
每条指令运行间隔(类似全局):
pg.PAUSE=1 %每隔1s运行一条程序
鼠标类命令
获取当前鼠标位置:
pg.position()
模拟鼠标左键:
pg.click(x,y)
模拟鼠标双击左键:
pg.doubleClick(x,y) #注意C是大写
模拟鼠标右键:
pg.click(x,y,button=‘right‘)
模拟鼠标移动:
pg.moveTo(x,y,time) %用time时长从当前移到目标位置
模拟鼠标拖动:
pg.dragTo(x,y,time,button=‘left‘)
键盘类命令
普通按键:
pg.press(‘key‘)
key:enter/left/ctrl
热键(快捷键):
pg.hotkey(‘key1‘,‘key2‘,‘key3‘)
按住不放型/释放按键:
pg.keyDown()/pg.keyUp()
键盘写入
键盘输入:
pg.write(‘‘,interval=time)
以上是关于win操作(1)-键盘鼠标输入的主要内容,如果未能解决你的问题,请参考以下文章