zoukankan      html  css  js  c++  java
  • 驱动级别模拟鼠标键盘

    驱动级别模拟鼠标键盘

    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[code])
            self.dd_dll.DD_key(self.vk[code], 1)
            # time.sleep(0.5)
            self.dd_dll.DD_key(self.vk[code], 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 !@#$")
  • 相关阅读:
    洛谷八连测R7 nzhtl1477-我回来了
    String中的equals方法原理分析
    Java线程
    Spring配置日志级别报红:Caused by: org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'logging.level' to java.util.Map<java.lang.String
    # SpringMVC跨服务器上传文件出现的问题
    使用Maven创建Spring-web项目的基本流程
    Maven的下载与安装(环境变量的配置)
    eNSP的安装(附链接)
    数据库分页操作
    Sql语句占位符?的使用
  • 原文地址:https://www.cnblogs.com/konghui/p/12980329.html
Copyright © 2011-2022 走看看