举个例子:
Private Sub Command1_Click()
ExitClick
MsgBox "弹出Message"
End SubPrivate Sub ExitClick()
......
End Sub通过调用ExitClick来结束Command1_Click,不执行后面的Msgbox,
而不在Command1_Click中写Exit Sub
Private Sub Command1_Click()
ExitClick
MsgBox "弹出Message"
End SubPrivate Sub ExitClick()
......
End Sub通过调用ExitClick来结束Command1_Click,不执行后面的Msgbox,
而不在Command1_Click中写Exit Sub
If ExitClick=xxxx then
MsgBox "弹出Message"
end if
End SubPrivate Function ExitClick()
......
End Sub
除非楼主是汇编高手:
1.根据Command1_Click中变量的地址推出栈中存储的原IP、SP
2.根据ExitClick中变量的地址推出栈中存储的原IP、SP的地址,并根据上面得到的值修改存储的原IP、SP
这时只要ExitClick一返回,就会回到Command1_Click的上级函数只不过还要考虑结构化异常处理的问题
还需要回复fs:[0]
至于seh,因为seh的结构是在堆栈上的,可以用esp来判断fs:[0]链表节点是否属于要退出的函数。
但还是不大可能,因为直接退出事件引起的后果是未释放的Me对象和其他变量等。
SetWindowsHookEx 'hook GetMessage
如果是消息是传递给comand1的,且消息类型是Click
则修改该消息,达到屏蔽的目的