Skip to content
vinyumaoPublic

About

轻量、美观的 Windows 全局键盘宏工具。按下触发键自动模拟按键序列(按键/文本/延时),游戏内全局生效;支持循环(连发)模式与防自触发。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

KeyMacro 键盘宏

一个轻量、美观的 Windows 全局键盘宏工具。按下指定触发键,按顺序自动模拟一串按键(支持按键组合、输入文本、延时),游戏内全局生效。

基于 Win32 低级键盘钩子(WH_KEYBOARD_LL) + SendInput 扫描码注入,非独占全屏的游戏(如恐怖黎明 Grim Dawn)也能生效。WPF 深色界面,系统托盘常驻。

主界面(循环模式)

上图:主界面 —— 勾选了「循环模式」,触发键 2、动作键 2、循环间隔 500ms(按一下触发键开始,再按一下停止)。

功能

  • 多个宏:每个宏有独立的触发键,支持 Ctrl/Shift/Alt/Win 修饰键组合
  • 动作序列:按键组合 / 输入文本(支持中文) / 延时等待,按顺序执行,每步可配独立延时
  • 全局生效:低级键盘钩子 + 扫描码注入,DirectInput 独占键盘的游戏内同样有效
  • 全局开关热键:默认 F8,一键启用/暂停所有宏(可录制自定义)
  • 排队上限(防连按积压):连按触发键时,排队中(未开始执行)的宏数量超过上限后,新触发被丢弃,避免"停手后还在一直执行";「应用」按钮可立即裁剪当前已排队的宏(保留最早排队的 N 个,即使之前是 0 不限也当场生效)
  • 防自触发:宏输出按键在 150ms 窗口内被识别为合成键,不会回喂触发;触发键恰好出现在自己宏输出里时也不会死循环
  • 循环模式:勾选后,按一下触发键即开始不断循环执行动作序列,再按一下同一触发键停止;可设置每圈完成后的间隔毫秒
  • 系统托盘常驻:关闭窗口最小化到托盘,双击恢复,右键菜单可启用/暂停/退出
  • 按键录制:录制触发键、录制动作按键,无需手敲键名
  • 开机自启:可选
  • 配置持久化:JSON 文件(config.json,与 exe 同目录),界面上改或手改文件均可

使用

  1. 双击 KeyMacro.exe 启动(默认请求管理员权限,普通权限亦可运行)
  2. 点「+ 新建宏」,输入名称
  3. 点「录制触发键」,按下要用的触发键(如 F9),勾选修饰键(如 Ctrl)
  4. 在「添加动作」区域:
    • 类型选「按键」→ 点「录制」按下目标键(如 C),填写延时毫秒 → 添加
    • 类型选「延时」→ 填写毫秒 → 添加
    • 类型选「文本」→ 输入文本(支持中文)→ 添加
  5. 开启「启用」开关,按触发键即可执行
  6. 按 F8(或自定义)暂停/恢复所有宏;托盘图标右键可退出

循环模式

在触发键面板勾选「循环模式」,并设置「间隔」(毫秒):

  • 按一下触发键 → 开始循环:按顺序执行一遍动作序列,完成后等待「间隔」毫秒,再执行下一遍,如此不断循环
  • 再按一下同一触发键 → 停止循环
  • 动作序列里每个步骤自带的延时仍会生效;「间隔」是每圈执行完之后的额外等待
  • 循环期间若把该宏「禁用」或关闭「循环模式」,循环会立即停止;全局暂停(关闭宏总开关)会停止所有循环
  • 触发键与动作键相同时也安全:宏合成的按键带内部标记,不会再次触发触发键,也不会打断循环

排队上限说明

底部状态栏「排队上限(0=不限)」输入框 +「应用」按钮:

  • 0 = 不限制(默认),保持传统行为:连按触发键全部依次排队执行
  • 设为 N(如 1~5):排队中(还没开始执行)的宏最多 N 个,满了再按触发键会被丢弃(触发键仍被吞掉,不传给游戏);正在执行的宏不计入排队
  • 点「应用」:立即对当前队列生效——把已排队的宏当场裁剪到 N 个(保留最早排队的),之后新触发按新上限判断
  • 暂停(全局开关关闭)时,排队中的宏立即作废,正在执行的那个跑完即止

注意事项

  • 触发键按下时会被"吞掉"(不传递给游戏/应用),动作序列中的按键正常发送
  • 全局开关热键与触发键冲突时,开关优先
  • 触发键可与动作键相同:宏合成的按键带内部标记(dwExtraInfo),既不会再次触发触发键,也不会打断循环;循环模式下用同一触发键即可开始/停止。若你的键盘驱动/输入法注入的按键无法区分,极少数情况下可能仍会回喂,建议用按键录制确认
  • 部分独占全屏(Exclusive Fullscreen)游戏或反作弊系统可能拦截钩子,建议游戏使用无边框窗口/窗口化模式
  • 宏用于游戏时请遵守游戏规则,公平竞技类游戏可能禁止宏

配置格式(config.json)

与 exe 同目录,UTF-8 无 BOM。字段:

字段 类型 说明
ToggleKey string 全局开关热键主键,默认 F8
ToggleModifiers string[] 开关热键修饰键
MacroEnabled bool 宏是否启用(可用热键切换)
StartMinimized bool 启动时最小化到托盘
AutoStart bool 开机自启
MaxQueueSize int 排队上限,0 = 不限制
Macros Macro[] 宏列表(名称/触发键/启用/循环模式/步骤)

每个 Macro 字段:

字段 类型 说明
Name string 宏名称
TriggerKey string 触发键主键(友好名称,如 F9)
TriggerModifiers string[] 触发键修饰键(如 ["Ctrl"])
Enabled bool 是否启用该宏
LoopEnabled bool 是否循环模式
LoopIntervalMs int 每圈完成后的间隔毫秒
Steps MacroStep[] 动作步骤

开发构建

依赖 .NET 6 SDK(Windows)。

# 编译
dotnet build -c Release

# 发布自包含单文件 exe(无需目标机器安装 .NET)
dotnet publish -c Release -r win-x64 --self-contained true \
  -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true \
  -p:EnableCompressionInSingleFile=true -o publish

产物:publish/KeyMacro.exe(自包含单文件,可拷到任意 Windows 10/11 x64 机器直接运行)。

项目结构

KeyboardMacro/
├── App.xaml(.cs)          # 启动、管理员自提升、配置加载
├── MainWindow.xaml(.cs)   # 主界面:宏列表/编辑器/设置/托盘
├── Core/
│   ├── GlobalKeyboardHook.cs  # WH_KEYBOARD_LL 低级键盘钩子
│   ├── KeyMap.cs              # 键名 <-> 虚拟键码映射
│   └── KeySender.cs           # SendInput 扫描码/Unicode 注入
├── Models/Models.cs       # AppConfig / Macro / MacroStep 数据模型
└── Services/
    ├── ConfigStore.cs     # config.json 读写
    └── MacroManager.cs    # 触发判定、执行队列、排队上限、防自触发、循环模式

About

轻量、美观的 Windows 全局键盘宏工具。按下触发键自动模拟按键序列(按键/文本/延时),游戏内全局生效;支持循环(连发)模式与防自触发。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages