Assembly MASM32中的鼠标选择
最后,我尝试在鼠标左键单击时使用汇编语言选择一个按钮,但没有找到任何有用的技术。任何帮助都将不胜感激!该程序的代码如下所示Assembly MASM32中的鼠标选择,assembly,mouseclick-event,masm32,irvine32,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,:
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
感谢您,我可以为您的需求树立一个榜样:
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
包括irvine32.inc
.数据
hStdIn dd 0
nRead dd 0
_输入记录结构
事件类型词?
单词用于校准
联合
按键事件按键事件记录
鼠标事件鼠标事件记录
WindowBufferSizeEvent窗口\缓冲区\大小\记录
菜单事件菜单事件记录
焦点事件焦点事件记录
末端
_输入记录结束
输入记录
控制台模块dd 0
Msg db“单击!”,0
Msg2数据库“Esc”,0
.代码
主进程
调用GetStdHandle、STD\u输入\u句柄
mov-hStdIn,eax
调用GetConsoleMode、hStdIn、ADDR ConsoleMode
mov-eax,0090h;启用|鼠标|输入|禁用|快速|编辑|模式|启用|扩展|标志
调用SetConsoleMode、hStdIn、eax
.WHILE InputRecord.KeyEvent.wVirtualKeyCode!=越狱
调用ReadConsoleInput、hStdIn、ADDR InputRecord、1、ADDR nRead
movzx eax,InputRecord.EventType
cmp eax,鼠标事件
jne无鼠
测试输入putrecord.MouseEvent.dwButtonState,1
jz无_鼠标
lea edx,味精
通话记录
jmp完成
无鼠标:
ENDW先生
lea edx,Msg2
通话记录
完成:
mov eax,控制台模式
调用SetConsoleMode、hStdIn、eax
调用ReadChar
调用ExitProcess,0
主端
端干管
删除了我的最后一条评论,我认为对齐问题很久以前就已经解决了。@MichaelPetch:你是说?它似乎在masm32v11r/windows.inc以及irvine32.inc/smallwin.inc中都已修复。但当地的声明让这个例子更加明确:——)足够公平。我删除了我的评论,因为我意识到这比道歉更安全,因为没有提到修改。“我是你的选民。”迈克尔佩奇谢谢你的例子。这大大打开了我的理解。@user5577817:我不是帮助你的那个善良的灵魂-rkhb是。如果这个答案对你有帮助,请考虑接受这个答案。有关如何接受以及为什么接受的更多信息,请参见以下SO信息: