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

使用NASM汇编器模拟Windows键盘按键:CapsLock无法释放求助

问题分析与解决

你的代码问题出在**keybd_event函数的参数传递错误**:Win32 API的keybd_event是stdcall调用约定,需要按从右到左的顺序传入4个完整参数,而你的代码只传了2个参数,且顺序颠倒,导致按键释放的逻辑没有正确执行。

keybd_event的核心参数说明(stdcall调用):

  • bVk:虚拟键码,CapsLock对应0x14(VK_CAPITAL)
  • bScan:按键扫描码,CapsLock为0x3A,也可传0让系统自动映射
  • dwFlags:事件标志,0表示按键按下(KEYEVENTF_KEYDOWN),0x2表示按键释放(KEYEVENTF_KEYUP)
  • dwExtraInfo:额外信息,传0即可

修正后的代码

section .text
global _start
extern ExitProcess
extern keybd_event

_start:
    ; 模拟CapsLock按键按下
    push 0                    ; dwExtraInfo = 0
    push 0                    ; dwFlags = KEYEVENTF_KEYDOWN
    push 0x3A                 ; bScan = CapsLock扫描码
    push 0x14                 ; bVk = VK_CAPITAL
    call keybd_event

    ; 模拟CapsLock按键释放
    push 0                    ; dwExtraInfo = 0
    push 0x2                  ; dwFlags = KEYEVENTF_KEYUP
    push 0x3A                 ; bScan = CapsLock扫描码
    push 0x14                 ; bVk = VK_CAPITAL
    call keybd_event

    call ExitProcess

编译命令保持不变

nasm -f win32 mouse.asm -o mouse.obj
golink /entry:_start /console kernel32.dll user32.dll mouse.obj

修正后运行程序,CapsLock会正确完成按下+释放的完整模拟,无需手动按键恢复。

内容的提问来源于stack exchange,提问作者Nihat Umarov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:32:36