assembly - MASM32 中的鼠标选择

标签 assembly mouseclick-event masm32 irvine32

最终,我尝试使用汇编语言在鼠标左键单击时选择一个按钮,但没有找到任何有用的技术。任何帮助将不胜感激!该程序的代码如下。

INCLUDE IRVINE32.inc
INCLUDELIB kernel32.lib
INCLUDELIB user32.lib
INCLUDELIB Winmm.lib
INCLUDELIB Windows.lib
INCLUDELIB kernel32.lib
INCLUDELIB gdi32.lib



WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
ExitProcess PROTO STDCALL :DWORD

WM_LBUTTONDOWN EQU 0x0201

.data
prompt BYTE "Mouse Not Pressed",0
message BYTE "Mouse pressed",0
MouseClick db 0
WM_LBUTTONDOWN bytE 0x0201



.code
main PROC 
mov edx, OFFSET message
.IF WM_LBUTTONDOWN == true
Call WriteString
.ENDIF
mov edx, OFFSET prompt
Call WriteString

invoke ExitProcess, 0
main ENDP
END main

最佳答案

感谢MichaelW我可以根据您的需求构建一个示例:

include irvine32.inc

.data

    hStdIn    dd 0
    nRead     dd 0

    _INPUT_RECORD STRUCT
        EventType   WORD ?
        WORD ?                    ; For alignment
        UNION
            KeyEvent              KEY_EVENT_RECORD          <>
            MouseEvent            MOUSE_EVENT_RECORD        <>
            WindowBufferSizeEvent WINDOW_BUFFER_SIZE_RECORD <>
            MenuEvent             MENU_EVENT_RECORD         <>
            FocusEvent            FOCUS_EVENT_RECORD        <>
          ENDS
    _INPUT_RECORD ENDS

    InputRecord _INPUT_RECORD <>

    ConsoleMode dd 0
    Msg db "Click! ",0
    Msg2 db "Esc ",0

.code

main PROC
    invoke GetStdHandle,STD_INPUT_HANDLE
    mov   hStdIn,eax

    invoke GetConsoleMode, hStdIn, ADDR ConsoleMode
    mov eax, 0090h          ; ENABLE_MOUSE_INPUT | DISABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS
    invoke SetConsoleMode, hStdIn, eax

    .WHILE InputRecord.KeyEvent.wVirtualKeyCode != VK_ESCAPE

        invoke ReadConsoleInput,hStdIn,ADDR InputRecord,1,ADDR nRead

        movzx  eax,InputRecord.EventType
        cmp eax, MOUSE_EVENT
        jne no_mouse
        test InputRecord.MouseEvent.dwButtonState, 1
        jz no_mouse

        lea edx, Msg
        Call WriteString
        jmp done

        no_mouse:
    .ENDW

    lea edx, Msg2
    Call WriteString

    done:
    mov eax, ConsoleMode
    invoke SetConsoleMode, hStdIn, eax
    call ReadChar
    invoke ExitProcess, 0
main ENDP

end main

关于assembly - MASM32 中的鼠标选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33973305/

相关文章:

assembly - NASM 错误 : parser instruction expected

从 C 调用汇编函数

assembly - 如何将 3 个字节(24 位)从内存移动到寄存器?

iphone - 如何在 Cocoa for iPhone 中模拟鼠标点击 UIWebView?

java - 检测到 JTable : sometimes not recognized 的点击

assembly - 在汇编中从键盘读取缓冲区

python - 使用子图而不是 matplotlib 中的图形来控制鼠标单击事件

assembly - 在宏汇编器中连接

c++ - MASM str 和 substr?

winapi - x86 程序集 (masm32) - 我可以在 Windows XP 上使用 int 21h 来打印内容吗?