8086汇编右键单击中断

时间:2010-03-10 16:46:05

标签: assembly mouse click x86-16 interrupt

我正在Windows机器上的8086程序集中处理一个项目,我需要知道单击了哪个鼠标按钮。这有什么中断?或者我该如何找到这个?

谢谢

2 个答案:

答案 0 :(得分:5)

如果你正在制作一个在windows下运行的DOS程序,你可以使用软件中断0x33,功能3,它返回BL寄存器中的按钮状态:

    mov   ax,0x3
    int   0x33
    test  bl,1
    jnz   left_button_pressed
    test  bl,2
    jnz   right_button_pressed

此处有更多信息http://www.ctyme.com/intr/rb-5959.htm

如果您正在制作原生Windows应用程序,则可以通过检查传递给已注册WndProc的标准鼠标按钮消息(WM_LBUTTONDOWN / UP,WM_BBUTTONDOWN / UP,WM_MBUTTONDOWN / UP)来测试是否按下了按钮,以便创建主窗口通过你的计划。

WndProc的函数声明是“LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);”,消息类型在uMsg中传递,所以你在[esp + 12]检查DWORD ]并将其与您要处理的消息ID进行比较。

答案 1 :(得分:1)

在“DOS”机器上,查看Software Interrupt 0x33 命令AH = 0x03返回在寄存器CX中按下的鼠标按钮(以及鼠标坐标和其他信息,在其他寄存器中)。

如果可用,用户可以更容易地为此目的使用Windows API,如matja的回答所示。