Ubuntu、windows下通过python模拟鼠标按键

有时候我们需要使用python执行一些脚本,可能需要让程序自动按键或自动点击鼠标,下面的代码实现了对键盘的模拟按键

一、在windowS下模拟实现:

需要安装pypiwin32库来实现,所以需要通过以下命令来安装

pip install pypiwin32

模拟键盘:

# coding=utf-8
import win32con
import win32api
import time
key_map = {
    "0": 49, "1": 50, "2": 51, "3": 52, "4": 53, "5": 54, "6": 55, "7": 56, "8": 57, "9": 58,
    "A": 65, "B": 66, "C": 67, "D": 68, "E": 69, "F": 70, "G": 71, "H": 72, "I": 73, "J": 74,
    "K": 75, "L": 76, "M": 77, "N": 78, "O": 79, "P": 80, "Q": 81, "R": 82, "S": 83, "T": 84,
    "U": 85, "V": 86, "W": 87, "X": 88, "Y": 89, "Z": 90
}
 
 
def key_down(key):
    """
    函数功能:按下按键
    参    数:key:按键值
    """
    key = key.upper()
    vk_code = key_map[key]
    win32api.keybd_event(vk_code,win32api.MapVirtualKey(vk_code,0),0,0)
 
 
def key_up(key):
    """
    函数功能:抬起按键
    参    数:key:按键值
    """
    key = key.upper()
    vk_code = key_map[key]
    win32api.keybd_event(vk_code, win32api.MapVirtualKey(vk_code, 0), win32con.KEYEVENTF_KEYUP, 0)
 
 
def key_press(key):
    """
    函数功能:点击按键(按下并抬起)
    参    数:key:按键值
    """
    key_down(key)
    time.sleep(0.02)
    key_up(key)

模拟鼠标:

# coding=utf-8
import win32api
import win32con
import win32gui


def move(x, y):
  """
  函数功能:移动鼠标到指定位置
  参  数:x:x坐标
       y:y坐标
  """
  win32api.SetCursorPos((x, y))


def get_cur_pos():
  """
  函数功能:获取当前鼠标坐标
  """
  p={"x":0,"y":0}
  pos = win32gui.GetCursorPos()
  p['x']=pos[0]
  p['y']=pos[1]
  return p


def left_click():
  """
  函数功能:鼠标左键点击
  """
  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN | win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)


def right_click():
  """
  函数功能:鼠标右键点击
  """
  win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN | win32con.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)


def left_down():
  """
  函数功能:鼠标左键按下
  """
  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)


def left_up():
  """
  函数功能:鼠标左键抬起
  """
  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)


def right_down():
  """
  函数功能:鼠标右键按下
  """
  win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)


def right_up():
  """
  函数功能:鼠标右键抬起
  """
  win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)

二、Ubuntu下模拟实现1(virtkey实现)

virtkey实现,以独占的方式,系统运行会中断,所以不暂时不满足自己的需求,继续探索

Ubuntu下模拟通过virtkey这个库来实现,所以需要通过以下命令来安装

sudo apt-get install python3-virtkey

这个库主要有两个API

press_keysym/release_keysym
press_unicode/release_unicode

第一个接受keysym作为参数,第二个接受键盘的unicode,键盘unicode用来模拟字母键还是很方便的,但要模拟Ctrl这样的键一直没找到方法,最终找到了一个关于keysym的表,解决了问题,表如下

至此,我们可以写出模拟Ctrl+V的代码

import virtkey
import time

v = virtkey.virtkey()
v.press_keysym(65507) #Ctrl键位
v.press_unicode(ord('v')) #模拟字母V
v.release_unicode(ord('v'))
v.release_keysym(65507)
time.sleep(5)
v.press_keysym(65421) #Enter
v.release_keysym(65421)

三、Ubuntu下模拟实现2(autoPy实现,多平台都可以用)

安装方法:

pip install autopy

模拟按键:

at.key.Code类型 

(1)F

(2)控制键

(3)方向键

使用方法:

toggle(key: Code, down: bool, modifiers: List[Modifier], modifier_delay: float=0)

import autopy as at

at.key.toggle(at.key.Code.UP_ARROW,True,[])
at.key.toggle(at.key.Code.UP_ARROW,False,[])
#按	方向键↑,向上移动一下
import autopy as at
at.key.toggle(at.key.Code.CONTROL,True,[at.key.Modifier.CONTROL],8)

print(123)
#当at.key.toggle(at.key.Code.CONTROL,True,[at.key.Modifier.CONTROL],8)执行并过了8秒才执行这句,相当于sleep(8)

at.key.toggle(at.key.Code.CONTROL,False,[at.key.Modifier.CONTROL])
#control键保持按下了8秒,关闭的时候直接关就行了

PS:注意释放,要不然会电脑会一直按着那个修饰键,直到你终止程序

tap(key:Code, modifiers: List[Modifier], delay: float=0)

import autopy as at
at.key.tap(at.key.Code.CONTROL,[at.key.Modifier.CONTROL],5)
#按住CONTROL键保持了10秒
print(123)
#之后又过了5秒才输出123

at.key.type_string(string:str,wpm:float=0)

import autopy as at
at.key.type_string('Hello123',0)
#Hello123
#快速地打出
声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 2
收藏 2
关注 18
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧