我們最大的一箇舊VB6應用程序中有一些代碼允許其他應用程序(包括某些dotNET應用程序)通過Windows消息傳遞一個ID - 然後使用此ID由VB6應用程序以常規的Windows窗體加載條目。消息掛鉤在用戶登錄和驗證後添加,並在註銷後刪除。VB6在使用活動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.如果代碼正在調試,並且出現錯誤以顯示「Continue End Debug幫助」對話框,則按下End立即退出Visual Studio(丟失任何未保存的更改)。如果消息掛鉤尚未激活,則不會發生這種情況。是什麼導致了這種情況,並且我能做些什麼來阻止它加載加載該代碼的代碼?其次,如果用戶退出應用程序而沒有正確註銷(通過任何方式),那麼消息掛鉤會發生什麼?
我希望我有就在上述所有條款...
因此,而不是在我的應用程序的主卸載事件'unhook',我應該監視WM_NCDESTROY在相關的窗口,並在那裏調用UnhookClaimFinderCall? – MartW 2009-09-08 20:36:24