驱动级别模拟鼠标键盘

驱动级别模拟鼠标键盘

import time
from ctypes import windll
import sys
import ctypes


# 管理员登录
def is_admin():
    try:
        return windll.shell32.IsUserAnAdmin()
    except:
        return False


def admin_run():
    if is_admin():

        InputPasswordUtil().dd_mo_cli(494, 502)
        time.sleep(1)
        InputPasswordUtil().type('kong199701')
        time.sleep(1)
        InputPasswordUtil().dd_mo_cli(515,586)
        time.sleep(2)
    else:
        if sys.version_info[0] == 3:
            windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)


# 隐藏黑窗口
def hide_cmd():
    whnd = ctypes.windll.kernel32.GetConsoleWindow()
    if whnd != 0:
        ctypes.windll.user32.ShowWindow(whnd, 0)
        ctypes.windll.kernel32.CloseHandle(whnd)


# 驱动级键盘鼠标操作
class InputPasswordUtil():
    """
        模拟键盘输入密码内容
    """

    def __init__(self):
        self.vk = {
            '5': 205, 'c': 503, 'n': 506, 'z': 501, '3': 203, '1': 201, 'd': 403, '0': 210, 'l': 409, '8': 208,
            'w': 302, 'u': 307, '4': 204, 'e': 303, '[': 311, 'f': 404, 'y': 306, 'x': 502, 'g': 405, 'v': 504,
            'r': 304, 'i': 308, 'a': 401, 'm': 507, 'h': 406, '.': 509, ',': 508, ']': 312, '/': 510, '6': 206,
            '2': 202, 'b': 505, 'k': 408, '7': 207, 'q': 301, "'": 411, '\': 313, 'j': 407, '`': 200, '9': 209,
            'p': 310, 'o': 309, 't': 305, '-': 211, '=': 212, 's': 402, ';': 410
        }

        # 需要组合shift的按键。
        self.vk2 = {
            '"': "'", '#': '3', ')': '0', '^': '6', '?': '/', '>': '.', '<': ',', '+': '=', '*': '8', '&': '7',
            '{': '[', '_': '-', '|': '\', '~': '`', ':': ';', '$': '4', '}': ']', '%': '5', '@': '2', '!': '1',
            '(': '9'
        }

        self.dd_dll = windll.LoadLibrary("DD94687.64.dll")

    def down_up(self, code):
        print("简码:", code, self.vk
) self.dd_dll.DD_key(self.vk
,
1) # time.sleep(0.5) self.dd_dll.DD_key(self.vk
, 2) def dd(self, key): if key.isupper(): # 按下 500是shift键码 self.dd_dll.DD_key(500, 1) self.down_up(key.lower()) self.dd_dll.DD_key(500, 2) elif key in r'~!@#$%^&*()_+{}|:"<>?': self.dd_dll.DD_key(500, 1) self.down_up(self.vk2[key]) self.dd_dll.DD_key(500, 2) else: self.down_up(key) def type(self, password): # 依次输入密码字符 for key in password: # print(key) self.dd(str(key)) time.sleep(0.5) def dd_mo_cli(self, x, y): self.dd_dll.DD_mov(x, y) self.dd_dll.DD_btn(1) self.dd_dll.DD_btn(2) def t_str(self): # self.dd_dll.DD_str("ddd") self.dd_dll.DD_key(0x30, 1) self.dd_dll.DD_key(0x30, 2) if __name__ == '__main__': if is_admin(): hide_cmd() InputPasswordUtil().dd_mo_cli(583, 460) time.sleep(1) InputPasswordUtil().type('kong199701') time.sleep(1) # InputPasswordUtil().dd_mo_cli(518, 562) # time.sleep(2) else: if sys.version_info[0] == 3: windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1) # 1. DD_btn(参数) # 功能: 模拟鼠标点击 # 参数: 1 =左键按下 ,2 =左键放开 # 4 =右键按下 ,8 =右键放开 # 16 =中键按下 ,32 =中键放开 # 64 =4键按下 ,128 =4键放开 # 256 =5键按下 ,512 =5键放开 # 例子:模拟鼠标右键 只需要连写(中间可添加延迟) dd_btn(4); dd_btn(8); # # # 2. DD_mov(参数x,参数y) # 功能: 模拟鼠标结对移动 # 参数: 参数x , 参数y 以屏幕左上角为原点。 # 例子: 把鼠标移动到分辨率1920*1080 的屏幕正中间, # int x = 1920/2 ; int y = 1080/2; # DD_mov(x,y) ;1234567890 # # # # 3. DD_movR(参数dx,参数dy) # 功能: 模拟鼠标相对移动 # 参数: 参数dx , 参数dy 以当前坐标为原点。 # 例子: 把鼠标向左移动10像素 # DD_movR(-10,0) ; # # # # 4. DD_whl(参数) # 功能: 模拟鼠标滚轮 # 参数: 1=前 , 2 = 后 # 例子: 向前滚一格, DD_whl(1) # # # # 5. DD_key(参数1,参数2) # 功能: 模拟键盘按键 # 参数: 参数1 ,请查看[DD虚拟键盘码表]。 # 参数2,1=按下,2=放开 # 例子: 模拟单键WIN, # DD_key(601, 1);DD_key(601, 2); # 组合键:ctrl+alt+del # DD_key(600,1); # DD_key(602,1); # DD_key(706,1); # DD_key(706,2); # DD_key(602,2); # DD_key(600,2); # # # # 6. DD_str(参数) # 功能: 直接输入键盘上可见字符和空格 # 参数: 字符串, (注意,这个参数不是int32 类型) # 例子: DD_str("MyEmail@aa.bb.cc !@#$")

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注