我们最大的旧 VB6 应用程序之一有一些代码允许其他应用程序(包括一些 dotNET 应用程序)通过 Windows 消息将 ID 传递给它 - 然后 VB6 应用程序使用此 ID 在常规 Windows 中加载条目形式。消息挂钩在用户登录并通过身份验证后添加,并在用户注销后删除。
Public Sub HookClaimFinderCall()
lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnhookClaimFinderCall()
Dim temp As Long
If gHW <> 0 Then temp = SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
End Sub
Private Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_FINDCLAIM Then
MasterFindClaim lParam
End If
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End Function
但是,这有两个问题。第一个与 Visual Studio 6 相关。如果正在调试代码,并且出现错误以调出“继续结束调试帮助”对话框,则按 End 会立即退出 Visual Studio(丢失所有未保存的更改)。如果尚未激活消息挂钩,则不会发生这种情况。是什么原因造成的,除了注释掉加载钩子的代码之外,我能做些什么来阻止它?
其次,如果用户在没有正确注销的情况下(通过任何方式)退出了应用程序,那么消息挂钩会发生什么?
我希望我上面的所有条款都是正确的......