You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于jQuery实现键盘按键模拟触发的技术咨询

嘿,这个需求我之前折腾过好几次!要实现不用手动按键盘,让系统以为真的有按键输入,本质是做系统级或环境级的按键模拟,不同平台和编程语言的实现路子不一样,我给你整理几个常用的靠谱方案:

Windows平台方案

Python 快速实现(适合快速验证)

用pyautogui库就能轻松搞定,它封装了系统底层的模拟逻辑,不用自己写复杂的API调用:

import pyautogui

def simulate(key):
    # 模拟按下并释放单个按键
    pyautogui.press(key)

# 调用示例
simulate('a')
simulate('b')

要是需要模拟组合键(比如Ctrl+C),直接用pyautogui.hotkey('ctrl', 'c')就行,它还支持enter、backspace这类特殊按键,非常灵活。

C# 系统级实现(适合底层控制)

如果需要更接近真实硬件按键的效果,直接调用Windows API的SendInput函数是最优解,这是系统原生支持的模拟方式:

using System;
using System.Runtime.InteropServices;

public class KeyboardSimulator
{
    [DllImport("user32.dll", SetLastError = true)]
    private static extern uint SendInput(uint nInputs, INPUT[] pInputs, int cbSize);

    [StructLayout(LayoutKind.Sequential)]
    private struct INPUT
    {
        public uint Type;
        public INPUTUNION Data;
    }

    [StructLayout(LayoutKind.Explicit)]
    private struct INPUTUNION
    {
        [FieldOffset(0)]
        public KEYBDINPUT Keyboard;
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct KEYBDINPUT
    {
        public ushort Vk;
        public ushort Scan;
        public uint Flags;
        public uint Time;
        public IntPtr ExtraInfo;
    }

    private const uint INPUT_KEYBOARD = 1;
    private const uint KEYEVENTF_KEYUP = 0x0002;

    public static void Simulate(char key)
    {
        ushort vkCode = (ushort)Char.ToUpper(key);
        // 构造按下按键的事件
        INPUT downInput = new INPUT
        {
            Type = INPUT_KEYBOARD,
            Data = new INPUTUNION
            {
                Keyboard = new KEYBDINPUT { Vk = vkCode, Flags = 0 }
            }
        };
        // 构造释放按键的事件
        INPUT upInput = new INPUT
        {
            Type = INPUT_KEYBOARD,
            Data = new INPUTUNION
            {
                Keyboard = new KEYBDINPUT { Vk = vkCode, Flags = KEYEVENTF_KEYUP }
            }
        };

        INPUT[] inputs = new INPUT[] { downInput, upInput };
        SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(INPUT)));
    }

    // 测试调用
    public static void Main()
    {
        Simulate('a');
        Simulate('b');
    }
}

macOS平台方案

macOS需要调用Quartz框架来实现系统级按键模拟,用Python结合pyobjc就能快速实现:

from Quartz import CGEventCreateKeyboardEvent, CGEventPost, kCGHIDEventTap
import time

def simulate(key):
    # macOS的键码和Windows不一样,这里只列了基础字母,需要更多键可以查官方映射表
    key_code_map = {
        'a': 0x00, 'b': 0x0B, 'c': 0x08, 'd': 0x02,
        'e': 0x0E, 'f': 0x03, 'g': 0x05, 'h': 0x04
    }
    if key not in key_code_map:
        print(f"暂不支持模拟按键: {key}")
        return
    
    key_code = key_code_map[key]
    # 模拟按下
    down_event = CGEventCreateKeyboardEvent(None, key_code, True)
    CGEventPost(kCGHIDEventTap, down_event)
    # 加个短暂延迟,更贴近真实按键的间隔
    time.sleep(0.01)
    # 模拟释放
    up_event = CGEventCreateKeyboardEvent(None, key_code, False)
    CGEventPost(kCGHIDEventTap, up_event)

# 调用示例
simulate('a')
simulate('b')

注意:macOS需要给运行程序的权限(系统偏好设置→安全性与隐私→隐私→辅助功能),不然模拟会失效。

网页端JavaScript方案

如果是在浏览器里模拟网页的按键事件,可以用KeyboardEvent构造函数,适合网页自动化场景:

function simulate(key) {
    // 构造按键按下事件
    const downEvent = new KeyboardEvent('keydown', {
        key: key,
        code: `Key${key.toUpperCase()}`,
        bubbles: true,
        cancelable: true
    });
    // 构造按键释放事件
    const upEvent = new KeyboardEvent('keyup', {
        key: key,
        code: `Key${key.toUpperCase()}`,
        bubbles: true,
        cancelable: true
    });

    // 可以指定目标元素,比如某个输入框,这里用document全局触发
    document.dispatchEvent(downEvent);
    // 延迟释放,模拟真实按键时长
    setTimeout(() => {
        document.dispatchEvent(upEvent);
    }, 10);
}

// 调用示例
simulate('a');
simulate('b');

⚠️ 注意:部分网站会通过事件验证阻止模拟输入,这种情况下可能需要结合浏览器扩展或自动化工具(比如Playwright)来实现。

内容的提问来源于stack exchange,提问作者Ows MG Tan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:57:01