가장 오래된 VB6 앱 중 하나에 다른 프로그램 (일부 dotNET 사용자 포함)이 Windows 메시지를 통해 ID를 전달할 수있는 코드가 있습니다.이 ID는 다음에 사용됩니다 VB6 응용 프로그램에서 일반 Windows 양식으로 항목을로드합니다. 사용자가 로그인하여 인증 한 후에 메시지 후크가 추가되고 로그 아웃되면 제거됩니다.활성 Windows 메시지 후크로 디버깅하는 동안 VB6 종료
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가 종료됩니다 (저장되지 않은 변경 내용은 손실됩니다). 메시지 후크가 아직 활성화되지 않은 경우에는 발생하지 않습니다. 무엇이이 문제를 일으키고, 후크를로드하는 코드를 주석 처리하지 못하게하기 위해 할 수있는 일이 있습니까?
둘째, 사용자가 로그 아웃하지 않고 앱을 종료하면 (어떤 방법 으로든) 메시지 훅은 어떻게됩니까? 내가 바로 위의 모든 조건을 가지고 희망
...
내 앱의 기본 언로드 이벤트에서 '언 후크'대신 관련 윈도우에서 WM_NCDESTROY를 모니터링하고 UnhookClaimFinderCall을 호출해야합니까? – MartW