python实现模拟按键down_Python模拟keydown

本文介绍如何使用Python模拟键盘输入,包括按下、释放键位等操作。通过ctypes库创建并发送INPUT结构体,实现了键盘事件的模拟,如键盘按键、组合键的按下和释放。
摘要由CSDN通过智能技术生成

这段代码可以帮助您入门。ctypes被大量使用。在底部,您将看到示例代码。

import ctypes

LONG = ctypes.c_long

DWORD = ctypes.c_ulong

ULONG_PTR = ctypes.POINTER(DWORD)

WORD = ctypes.c_ushort

class MOUSEINPUT(ctypes.Structure):

_fields_ = (('dx', LONG),

('dy', LONG),

('mouseData', DWORD),

('dwFlags', DWORD),

('time', DWORD),

('dwExtraInfo', ULONG_PTR))

class KEYBDINPUT(ctypes.Structure):

_fields_ = (('wVk', WORD),

('wScan', WORD),

('dwFlags', DWORD),

('time', DWORD),

('dwExtraInfo', ULONG_PTR))

class HARDWAREINPUT(ctypes.Structure):

_fields_ = (('uMsg', DWORD),

('wParamL', WORD),

('wParamH', WORD))

class _INPUTunion(ctypes.Union):

_fields_ = (('mi', MOUSEINPUT),

('ki', KEYBDINPUT),

('hi', HARDWAREINPUT))

class INPUT(ctypes.Structure):

_fields_ = (('type', DWORD),

('union', _INPUTunion))

def SendInput(*inputs):

nInputs = len(inputs)

LPINPUT = INPUT * nInputs

pInputs = LPINPUT(*inputs)

cbSize = ctypes.c_int(ctypes.sizeof(INPUT))

return ctypes.windll.user32.SendInput(nInputs, pInputs, cbSize)

INPUT_MOUSE = 0

INPUT_KEYBOARD = 1

INPUT_HARDWARD = 2

def Input(structure):

if isinstance(structure, MOUSEINPUT):

return INPUT(INPUT_MOUSE, _INPUTunion(mi=structure))

if isinstance(structure, KEYBDINPUT):

return INPUT(INPUT_KEYBOARD, _INPUTunion(ki=structure))

if isinstance(structure, HARDWAREINPUT):

return INPUT(INPUT_HARDWARE, _INPUTunion(hi=structure))

raise TypeError('Cannot create INPUT structure!')

WHEEL_DELTA = 120

XBUTTON1 = 0x0001

XBUTTON2 = 0x0002

MOUSEEVENTF_ABSOLUTE = 0x8000

MOUSEEVENTF_HWHEEL = 0x01000

MOUSEEVENTF_MOVE = 0x0001

MOUSEEVENTF_MOVE_NOCOALESCE = 0x2000

MOUSEEVENTF_LEFTDOWN = 0x0002

MOUSEEVENTF_LEFTUP = 0x0004

MOUSEEVENTF_RIGHTDOWN = 0x0008

MOUSEEVENTF_RIGHTUP = 0x0010

MOUSEEVENTF_MIDDLEDOWN = 0x0020

MOUSEEVENTF_MIDDLEUP = 0x0040

MOUSEEVENTF_VIRTUALDESK = 0x4000

MOUSEEVENTF_WHEEL = 0x0800

MOUSEEVENTF_XDOWN = 0x0080

MOUSEEVENTF_XUP = 0x0100

def MouseInput(flags, x, y, data):

return MOUSEINPUT(x, y, data, flags, 0, None)

VK_LBUTTON = 0x01               # Left mouse button

VK_RBUTTON = 0x02               # Right mouse button

VK_CANCEL = 0x03                # Control-break processing

VK_MBUTTON = 0x04               # Middle mouse button (three-button mouse)

VK_XBUTTON1 = 0x05              # X1 mouse button

VK_XBUTTON2 = 0x06              # X2 mouse button

VK_BACK = 0x08                  # BACKSPACE key

VK_TAB = 0x09                   # TAB key

VK_CLEAR = 0x0C                 # CLEAR key

VK_RETURN = 0x0D                # ENTER key

VK_SHIFT = 0x10                 # SHIFT key

VK_CONTROL = 0x11               # CTRL key

VK_MENU = 0x12                  # ALT key

VK_PAUSE = 0x13                 # PAUSE key

VK_CAP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 pywinio 库来实现虚拟键盘的使用。下面是一个简单的示例代码: ```python import win32con import win32api import win32gui import pywinio 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 } def key_down(key_code): extra = win32api.MapVirtualKey(key_code, 0) win32api.keybd_event(key_code, extra) def key_up(key_code): extra = win32api.MapVirtualKey(key_code, 0) win32api.keybd_event(key_code, extra, win32con.KEYEVENTF_KEYUP) def key_press(key_code): key_down(key_code) key_up(key_code) def type_string(input_string): for char in input_string: if char == '\n': key_press(VK_CODE['enter']) else: key_press(VK_CODE[char]) def send_keys(input_string): for char in input_string: if char == '\n': win32gui.SendMessage(win32gui.GetForegroundWindow(), win32con.WM_KEYDOWN, win32con.VK_RETURN, 0) else: win32gui.SendMessage(win32gui.GetForegroundWindow(), win32con.WM_CHAR, ord(char), 0) def virtual_key_press(key_code): # 打开设备 with open(r"\\.\WinIo", "w") as f: f.write("\0") # 发送键盘事件 winio = pywinio.WinIO() winio.KeyPress(key_code, 0) # 示例 type_string('hello world') send_keys('hello world') virtual_key_press(0x41) # 模拟按下 A 键 ``` 在上面的示例代码中,我们定义了三个函数来模拟键盘事件: - `type_string` 函数用于输入字符串,它会模拟按下每个字符对应的键,并根据 `\n` 模拟回车键。 - `send_keys` 函数也用于输入字符串,它会通过 `win32gui` 库发送键盘事件,其中回车键需要模拟为发送 `WM_KEYDOWN` 消息。 - `virtual_key_press` 函数用于模拟按下一个虚拟键码对应的键,它会使用 `pywinio` 库来发送键盘事件。 通过这些函数,我们就可以实现虚拟键盘的使用了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值