Python 实现键鼠操作

Python 实现键鼠操作

    • 前言
    • 需要的库
    • 直接上代码
    • 小结

前言

前几天玩的按键精灵由于版本太老,不兼容UTF8编码,就用python来封装了一些键鼠操作。

需要的库

  • time
  • pyautogui
  • OpenCV
  • aircv #Aircv是基于OpenCV的所以需要安装OpenCV和numpy
  • os
  • win32

直接上代码

1.导入库

import time
import pyautogui
import aircv as ac 
import os
import win32gui
import win32con
import win32.win32clipboard as w

2.鼠标模拟

def getmouse():			#得到鼠标当前位置
    x,y=pyautogui.position()
    return x,y

def moveto(x,y,movetime=0): #鼠标移动 x,y_移动位置,movetime_移动时间
    pyautogui.moveTo(x,y,duration=movetime)

def click_l():		#当前位置左键单击
    x,y=pyautogui.position()
    pyautogui.click(x,y,button="left")

def click_r():		#当前位置右键单击
    x,y=pyautogui.position()
    pyautogui.click(x,y,button="right")

def dbclick_l():	#左键双击
    pyautogui.doubleClick(button="left")

def dbclick_r():	#右键双击
    pyautogui.doubleClick(button="right")

def dbclick_m():	#中键双击
    pyautogui.doubleClick(button="middle")

def mousedown():	#按下
    pyautogui.mouseDown()

def mouseup():	#释放
    pyautogui.mouseUp()

def scroll(sizes=0, x=None, y=None):#滑轮滑动 sizes_int类型,x,y_在x,y滑动位置
    pyautogui.scroll(sizes, x , y)

3.键盘模拟

def keydown():#按下
    pyautogui.keyDown()

def keyup(): #弹起
    pyautogui.keyUp()

def hotkey(*key):#热键 如ctrl+v _ hotkey("ctrl","v")
    pyautogui.hotkey(*key)

4.图像查找

##pyautogui自带的图像查找太慢了,识别准确率也不行,自己封装了一个。
def findpic(pic,areas,same=0.7):    #图像查找 pic_识别图片,areas_识别区域,same_相似度 ##不兼容中文路径
    fpic=ac.imread(pic)             #读取图片
    img=pyautogui.screenshot(region=areas)  #截屏,可以换其他截屏方式,我电脑PIL不知怎么的用不了,可以试试。
    img.save("jp.png")
    jp=ac.imread("jp.png")                  #读取图片
    result=ac.find_template(jp,fpic,same)   #用aircv识别
    os.remove("jp.png")                     #删除截屏 
    if(result!=None):        
        return result['result'][0],result['result'][1]  #返回图片左上角x,y
    return None

5.其他

def getword(提示=""):  #可以输入的消息弹窗
    word=pyautogui.prompt(提示)
    return word
    
def getscreensize():	#屏幕分辨率
    x,y=pyautogui.size()
    return x,y

def windows_findhwnd(cls=None,title=None):#获取顶层窗口句柄 class_类,title_标题
    hwnd = win32gui.FindWindow(cls, title) 
    return hwnd

def windows_Top(hwnd,key=0):##窗口置前 hwnd_窗口句柄,0_置前,1_置后
    if key==0: #置前 
        win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)
        win32gui.SetForegroundWindow(hwnd)
    elif key==1: #隐藏
        win32gui.ShowWindow(hwnd, win32con.SW_HIDE)

def windows_moveto(x,y,hwnd):##窗口移动 hwnd_窗口句柄, x,y_移动位置
    left, top, right, bottom = win32gui.GetWindowRect(hwnd)
    win32gui.MoveWindow(hwnd,x,y,right-left,bottom-top,True)

def hwnd_moveto(x,y,hwnd):##鼠标相对窗口移动 x,y_以窗口右上角为0,0移动位置,hwnd_句柄
    left, top, right, bottom = win32gui.GetWindowRect(hwnd)
    pyautogui.moveTo(x+left,y+top)
    
def write(text=""): #写入文字    #原理:设置剪切板,粘贴
    w.OpenClipboard()
    w.EmptyClipboard()
    w.SetClipboardData(win32con.CF_UNICODETEXT, text)
    w.CloseClipboard()  #设置剪切板
    pyautogui.hotkey("ctrl","v") #粘贴

def windows_setsize(x,y,hwnd): #设置窗口大小 x,y_窗口大小,hwnd_句柄
    left, top, right, bottom = win32gui.GetWindowRect(hwnd)
    win32gui.MoveWindow(hwnd,left,top,x,y,True)

小结

该方法可以设置成为一个模块,方便使用。
本人小白一个,如有错误还望指出。
技术不足,导致一些操作只能取巧,如果大家有更好的方法也能告诉我。
如果大家觉得有用,希望大家多多点赞!

你可能感兴趣的:(python,按键事件)