驅動級別模擬鼠標鍵盤
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 !@#$")