未定义符号:GetAsyncKeyState

问题描述 投票:0回答:1

我正在尝试利用汇编语言中的 GetAsyncKeyState 函数来检测键盘按键的状态。具体来说,我想在用户按下“W”键时打印一条消息。但是,我在尝试使用 GetAsyncKeyState 函数时遇到了“未定义符号”错误。

我已确保已正确包含 user32.lib 库文件,并且在代码中使用了正确的函数名称。我什至尝试手动添加 extern GetAsyncKeyState: PROC 来声明 GetAsyncKeyState 函数,但问题仍然存在。

INCLUDE Irvine32.inc
INCLUDELIB user32.lib

.data
    message db "user32.lib is working!", 0
    msg db "You pressed 'W'", 0
.code
main proc
    invoke MessageBoxA, 0, ADDR message, ADDR caption, MB_OK
    call CheckForKey
main endp

CheckForKey PROC
    mov eax, 'W'
    call GetAsyncKeyState
    test eax, eax
    jz notPressed

    mov edx, OFFSET msg
    call WriteString
    jmp endCheck

notPressed:
    jmp endCheck

endCheck:
    ret
CheckForKey ENDP


end main

我想测试使用 GetAsyncKeyState 按“W”时是否可以打印字符串,但在使用 GetAsyncKeyState 时遇到此错误。我想知道可能导致此错误的原因以及如何解决它。任何帮助将不胜感激!

assembly winapi x86 masm irvine32
1个回答
0
投票

根据您和@MichaelPetch的评论,添加行

GetAsyncKeyState PROTO STDCALL :DWORD
解决了“未定义的符号”问题。您还可以参阅如何在 x64 MASM 程序中调用 Windows API 以获取更多信息。

第二期,

但是,当我按下键盘上的W键时,程序 自动终止而不显示消息“您按下了 ‘W’”。

也正如@MichaelPetch所说,您需要将

AsyncGetKeyState
放入循环中。您的进程不会等待您的输入并终止。请参阅 此 GetAsyncKeyState 示例

© www.soinside.com 2019 - 2024. All rights reserved.