欢迎您光临本站
首页 > Python > 正文
李蓝猫头像
李蓝猫

2021-07-11

评论者
Python
14 0

项目需要用到了模拟点击、模拟键盘输入等操作

考虑时间等因素采取了这个办法

优缺点明显 有点比较简单便捷 缺点容错略比较低

调用鼠标比较费事,是通过像素坐标实现的,如果没有特殊需求或万不得已不建议使用

考虑后期使用调用进程实现开关的稳妥方案

代码附件:1528352965277900.zip


使用方法

引入win32api   pip install pywin32

键位分布代码,基本的网上都可以找到 微软提供的键盘分布

文件名:Vc.py
 
#
# _*_ coding:UTF-8 _*_
from ctypes import *
import time
VK_CODE = {
    'backspace': 0x08,
    'tab': 0x09,
    'clear': 0x0C,
    'enter': 0x0D,
    'shift': 0x10,
    'ctrl': 0x11,
    'alt': 0x12,
    'pause': 0x13,
    'caps_lock': 0x14,
    'esc': 0x1B,
    'spacebar': 0x20,
    'page_up': 0x21,
    'page_down': 0x22,
    'end': 0x23,
    'home': 0x24,
    'left_arrow': 0x25,
    'up_arrow': 0x26,
    'right_arrow': 0x27,
    'down_arrow': 0x28,
    'select': 0x29,
    'print': 0x2A,
    'execute': 0x2B,
    'print_screen': 0x2C,
    'ins': 0x2D,
    'del': 0x2E,
    'help': 0x2F,
    '0': 0x30,
    '1': 0x31,
    '2': 0x32,
    '3': 0x33,
    '4': 0x34,
    '5': 0x35,
    '6': 0x36,
    '7': 0x37,
    '8': 0x38,
    '9': 0x39,
    'a': 0x41,
    'b': 0x42,
    'c': 0x43,
    'd': 0x44,
    'e': 0x45,
    'f': 0x46,
    'g': 0x47,
    'h': 0x48,
    'i': 0x49,
    'j': 0x4A,
    'k': 0x4B,
    'l': 0x4C,
    'm': 0x4D,
    'n': 0x4E,
    'o': 0x4F,
    'p': 0x50,
    'q': 0x51,
    'r': 0x52,
    's': 0x53,
    't': 0x54,
    'u': 0x55,
    'v': 0x56,
    'w': 0x57,
    'x': 0x58,
    'y': 0x59,
    'z': 0x5A,
    'numpad_0': 0x60,
    'numpad_1': 0x61,
    'numpad_2': 0x62,
    'numpad_3': 0x63,
    'numpad_4': 0x64,
    'numpad_5': 0x65,
    'numpad_6': 0x66,
    'numpad_7': 0x67,
    'numpad_8': 0x68,
    'numpad_9': 0x69,
    'multiply_key': 0x6A,
    'add_key': 0x6B,
    'separator_key': 0x6C,
    'subtract_key': 0x6D,
    'decimal_key': 0x6E,
    'divide_key': 0x6F,
    'F1': 0x70,
    'F2': 0x71,
    'F3': 0x72,
    'F4': 0x73,
    'F5': 0x74,
    'F6': 0x75,
    'F7': 0x76,
    'F8': 0x77,
    'F9': 0x78,
    'F10': 0x79,
    'F11': 0x7A,
    'F12': 0x7B,
    'F13': 0x7C,
    'F14': 0x7D,
    'F15': 0x7E,
    'F16': 0x7F,
    'F17': 0x80,
    'F18': 0x81,
    'F19': 0x82,
    'F20': 0x83,
    'F21': 0x84,
    'F22': 0x85,
    'F23': 0x86,
    'F24': 0x87,
    'num_lock': 0x90,
    'scroll_lock': 0x91,
    'left_shift': 0xA0,
    'right_shift ': 0xA1,
    'left_control': 0xA2,
    'right_control': 0xA3,
    'left_menu': 0xA4,
    'right_menu': 0xA5,
    'browser_back': 0xA6,
    'browser_forward': 0xA7,
    'browser_refresh': 0xA8,
    'browser_stop': 0xA9,
    'browser_search': 0xAA,
    'browser_favorites': 0xAB,
    'browser_start_and_home': 0xAC,
    'volume_mute': 0xAD,
    'volume_Down': 0xAE,
    'volume_up': 0xAF,
    'next_track': 0xB0,
    'previous_track': 0xB1,
    'stop_media': 0xB2,
    'play/pause_media': 0xB3,
    'start_mail': 0xB4,
    'select_media': 0xB5,
    'start_application_1': 0xB6,
    'start_application_2': 0xB7,
    'attn_key': 0xF6,
    'crsel_key': 0xF7,
    'exsel_key': 0xF8,
    'play_key': 0xFA,
    'zoom_key': 0xFB,
    'clear_key': 0xFE,
    '+': 0xBB,
    ',': 0xBC,
    '-': 0xBD,
    '.': 0xBE,
    '/': 0xBF,
    '`': 0xC0,
    ';': 0xBA,
    '[': 0xDB,
    '\\': 0xDC,
    ']': 0xDD,
    "'": 0xDE,
    '`': 0xC0
}
 
 
class POINT(Structure):
    _fields_ = [("x", c_ulong), ("y", c_ulong)]
 
 
def main_t():
    POINT()
 
if __name__ == '__main__':
    main_t()


鼠标事件及键盘输入组合键

#
# _*_ coding:UTF-8 _*_
import win32api
import win32con
import win32gui
from ctypes import *
import time
import sys
import os
import json
import codecs
import requests
import socket
#引入上面的Vc.py
from lib.vccode.Code import Vc
 
 
def get_mouse_point():
    po = POINT()
    windll.user32.GetCursorPos(byref(po))
    return int(po.x), int(po.y)
#鼠标左键单点
def mouse_click(x=None, y=None, sleeptime=1.5):
    if not x is None and not y is None:
        mouse_move(x, y)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    time.sleep(sleeptime)
#鼠标右键单点
def mouse_rclick(x=None, y=None, sleeptime=1.5):
    if not x is None and not y is None:
        mouse_move(x, y)
    win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)
    time.sleep(sleeptime)
#鼠标左键双击
def mouse_dclick(x=None, y=None, sleeptime=0.05):
    if not x is None and not y is None:
        mouse_move(x, y)
    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)
    time.sleep(sleeptime)
#鼠标移动
def mouse_move(x, y):
    windll.user32.SetCursorPos(x, y)
 
# 键盘输入 新增大小写区分 特殊组合键如@#¥%……&*()等
def key_input(str='', sleeptime=0.3):
    for c in str:
        if c.isspace() == True:
            code = VK_CODE['spacebar']
            win32api.keybd_event(code, 0, 0, 0)
            win32api.keybd_event(code, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == '!':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0x31, 0, 0, 0)
            win32api.keybd_event(0x31, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == '@':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0x32, 0, 0, 0)
            win32api.keybd_event(0x32, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == '#':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0x33, 0, 0, 0)
            win32api.keybd_event(0x33, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == '$':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0x34, 0, 0, 0)
            win32api.keybd_event(0x34, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == '%':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0x35, 0, 0, 0)
            win32api.keybd_event(0x35, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == '^':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0x36, 0, 0, 0)
            win32api.keybd_event(0x36, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == '&':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0x37, 0, 0, 0)
            win32api.keybd_event(0x37, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == '*':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0x38, 0, 0, 0)
            win32api.keybd_event(0x38, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == '(':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0x39, 0, 0, 0)
            win32api.keybd_event(0x39, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == ')':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0x30, 0, 0, 0)
            win32api.keybd_event(0x30, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == ':':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0xBA, 0, 0, 0)
            win32api.keybd_event(0xBA, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == '?':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0xBF, 0, 0, 0)
            win32api.keybd_event(0xBF, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        elif c == '=':
            # win32api.keybd_event(0x10,0,0,0)
            win32api.keybd_event(0xBB, 0, 0, 0)
            win32api.keybd_event(0xBB, 0, win32con.KEYEVENTF_KEYUP, 0)
            # win32api.keybd_event(0x10,0,win32con.KEYEVENTF_KEYUP,0)
            time.sleep(sleeptime)
            continue
        elif c == '_':
            win32api.keybd_event(0x10, 0, 0, 0)
            win32api.keybd_event(0xBD, 0, 0, 0)
            win32api.keybd_event(0xBD, 0, win32con.KEYEVENTF_KEYUP, 0)
            win32api.keybd_event(0x10, 0, win32con.KEYEVENTF_KEYUP, 0)
            time.sleep(sleeptime)
            continue
        else:
            if c.isupper() == True:
                c = c.lower()
                code = VK_CODE[c]
                win32api.keybd_event(0x14, 0, 0, 0)
                win32api.keybd_event(0x14, 0, win32con.KEYEVENTF_KEYUP, 0)
                win32api.keybd_event(code, 0, 0, 0)
                win32api.keybd_event(code, 0, win32con.KEYEVENTF_KEYUP, 0)
                win32api.keybd_event(0x14, 0, 0, 0)
                win32api.keybd_event(0x14, 0, win32con.KEYEVENTF_KEYUP, 0)
            else:
                code = VK_CODE[c]
                win32api.keybd_event(code, 0, 0, 0)
                win32api.keybd_event(code, 0, win32con.KEYEVENTF_KEYUP, 0)
        time.sleep(sleeptime)
 
# 回车
def enter_down():
    win32api.keybd_event(13, 0, 0, 0)
    win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)
 
#alt+f4
def close():
    win32api.keybd_event(0x12, 0, 0, 0)
    win32api.keybd_event(0x73, 0, 0, 0)
    win32api.keybd_event(0x73, 0, win32con.KEYEVENTF_KEYUP, 0)
    win32api.keybd_event(0x12, 0, win32con.KEYEVENTF_KEYUP, 0)
    time.sleep(1)


版权声明:本站所提供的文章、图片等内容均为用户发布或互联网整理而来,仅供学习参考,如有侵犯您的版权,请联系我们客服人员删除。

317

精彩推荐

暂无评论

文明用语