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
等待安装,直到完成

如何使用

  1. 打开python的IDLE
  2. 导入库:
    import pyautogui as pg
  3. 按需输入命令即可

命令

每条指令运行间隔(类似全局):
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)-键盘鼠标输入的主要内容,如果未能解决你的问题,请参考以下文章

.NET下如何拦截鼠标键盘消息?Win32NET来帮你

请用Python如何模拟键盘操作

pyautogui模拟鼠标键盘操作

鼠标中轴滚动&键盘输入

mac mini纯键盘操作连接蓝牙鼠标

windows中哪些API能了解用户是不是在使用鼠标或者键盘?