Python模拟键盘鼠标 Fay·D·Flourite

python模拟鼠标按键

搞这个一是昨天临时受群里影响突发奇想想整一个问号发送器。。二是准备自己弄个badusb(虽然好像usb开发板都不支持python语言,不过要说的话原理都是模拟按键和鼠标)

我用的win32库,做起来非常简单啊,就记录一下代码

安装只需要pip install pywin32就行,使用则导入相应的库

如这个用到的是win32apiwin32con

模拟鼠标

  1. 获取鼠标位置

win32api.GetCursorPos()

返回的是元组,无法修改,可以整个新数组记录坐标,修改成想要的过后用tuple()

  1. 设置鼠标位置

win32api.SetCursorPos((x, y))

  1. 鼠标事件

左键按下

win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)

左键放开

win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

右键按下

win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)

右键放开

win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

模拟滚轮

win32api.mouse_event(win32con.MOUSEEVENTF_WHEEL,0,0,-500)

中键按下

win32api.mouse_event(win32con.MOUSEEVENTF_MIDDLEDOWN, 0, 0, 0, 0)

中键放开

win32api.mouse_event(win32con.MOUSEEVENTF_MIDDLEUP, 0, 0, 0, 0)

模拟键盘

  1. 键盘事件

按下键

win32api.keybd_event(VK_CODE[word], 0, 0, 0)

放开键

win32api.keybd_event(VK_CODE[word], 0, win32con.KEYEVENTF_KEYUP, 0)

问号脚本

问号脚本如下

import win32api
import win32con
import time

def get_new_mouse():
    coordinate=win32api.GetCursorPos()
    wide=coordinate[0]-30
    high=coordinate[1]
    new_coordinate=[]
    new_coordinate.append(wide)
    new_coordinate.append(high)
    new_coordinate=tuple(new_coordinate)
    return new_coordinate

def mouse_down():
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)

def mouse_up():
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

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.upper()
    vk_code = key_map[key]
    win32api.keybd_event(vk_code,win32api.MapVirtualKey(vk_code,0),0,0)

def key_up(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_down(key)
    time.sleep(0.02)
    key_up(key)

def wenhao():
    key_press('g')
    time.sleep(0.02)
    mouse_down()
    time.sleep(0.02)
    new_place=get_new_mouse()
    win32api.SetCursorPos(new_place)
    time.sleep(0.02)
    mouse_up()

if __name__ == '__main__':
    time.sleep(6)
    for i in range(0,10):
        wenhao()
        time.sleep(0.5)
    print('done
    ')
    exit()

虽然无法使用(这就是lol的防作弊么),但里面用于操作的函数还是比较完善了。

下为更加完善的字母表

字母和数字键     数字小键盘的键       功能键         其它键 
      键   键码   键   键码     键   键码    键      键码 
      A   65       0   96        F1   112     Backspace   8 
      B   66       1   97        F2   113     Tab       9 
      C   67       2   98        F3   114     Clear     12 
      D   68       3   99        F4   115     Enter     13 
      E   69       4   100       F5   116     Shift     16 
      F   70       5   101       F6   117     Ctrl      17 
      G   71       6   102       F7   118     Alt       18 
      H   72       7   103       F8   119     Caps Lock    20 
      I   73       8   104       F9   120     Esc       27 
      J   74       9   105       F10  121     Spacebar  32 
      K   75       *   106       F11  122     Page Up   33 
      L   76       +   107       F12  123     Page Down 34 
      M   77       Enter 108     --   --      End       35 
      N   78       -   109       --   --      Home      36 
      O   79       .   110       --   --      Left Arrow   37 
      P   80       /   111       --   --      Up Arrow     38 
      Q   81       --   --       --   --      Right Arrow  39 
      R   82       --   --       --   --      Down Arrow   40 
      S   83       --   --       --   --      Insert      45 
      T   84       --   --       --   --      Delete      46 
      U   85       --   --       --   --      Help        47 
      V   86       --   --       --   --      Num Lock    144 
      W   87          
      X   88      
      Y   89      
      Z   90      
      0   48      
      1   49      
      2   50       
      3   51       
      4   52       
      5   53       
      6   54       
      7   55       
      8   56       
      9   57