1

WindowEvents_WindowActivated 처리기를 Visual Studio 2005 매크로 EnvironmentEvents 모듈에 추가하면 이상한 부작용이 발생합니다. Visual Studio에서 한 창에서 다른 창을 클릭하면 클릭은 두 번 클릭으로 처리됩니다.Visual Studio 매크로 : WindowActivated 처리기가 클릭을 두 번 클릭으로 전환합니다.

예를 들어 편집기 창에 포커스를두고 솔루션 탐색기에서 파일을 클릭하면 파일이 열립니다.

또는 도구 상자에 포커스를두고 편집기 창에서 클릭하면 클릭하는 단어가 선택됩니다. 대부분의 경우, 한 번의 클릭으로 창이 활성화되면 해당 클릭은 두 번 클릭으로 처리됩니다.

Private Sub WindowEvents_WindowActivated(ByVal GotFocus As EnvDTE.Window, _ 
             ByVal LostFocus As EnvDTE.Window) _ 
             Handles WindowEvents.WindowActivated 
    ' Do nothing. 
End Sub 

내가 멋진 물건을 수행 할 WindowActivated 이벤트를 사용하기를 원하지만이 살인자 :

이도 빈 이벤트 핸들러와 함께 발생합니다. 이걸 본 사람이 있나요? (나는 타이머를 사용하고 현재 창을 폴링 할 수 있다는 것을 알지만, 멍청이.)

+0

다른 창에서 데이터 세트 디자이너를 클릭하면 동일한 성가신 동작이 발생합니다. 데이터베이스 코드 숨김으로 들어갑니다. –

+1

이벤트 처리기가 두 번 호출되는 중입니까? – Steven

+0

@Steven : 처리기는 한 번만 호출되지만 Amissico의 대답에 대한 내 의견을 참조하십시오. – RichieHindle

답변

2

이 문제는 발생하지 않습니다. 대부분 WindowActivated 이벤트가 두 번 발생합니다. 이것은 일반적으로 활성화 된 창에서 다른 추가 기능과 같이 다른 프로세스가 포커스를 훔쳐 창을 다시 활성화 할 때 발생합니다. WindowActivated 이벤트 내에서 MsgBox 호출을 추가하여 발생하는 동작을 복제 할 수 있습니다.

RichieHindle 편집 : 실제 답변은 덧글에 묻혀 있습니다. "추가 기능에서이 기능을 사용해 보셨습니까?" 그것은 추가 기능에서 잘 작동합니다.

+1

나는 당신이 포커스/활성화 문제라는 것이 옳다고 생각하지만 상황은 이상합니다. 작업과 실패의 차이점은 P/Invoke를 통해 기본 함수를 호출하는 것 같습니다. 내 매크로는 문제를 일으키는 SetWindowText를 호출합니다. 전화를 끊으면 괜찮습니다. 빈 핸들러가 실패를 일으킨 상태가 된 것은 어떻게 된 것인가? 나는 지금 그것을 재현 할 수 없다. 나는 VS 매크로 런타임 환경이 별도의 프로세스에 있다는 것을 알고 있으므로 P/Invoke를 사용하여 프로세스가 포커스를 얻는 것에 대해 뭔가가있을 수도 있습니다. (처리기는 한 번만 호출됩니다.) – RichieHindle

+0

SetWindowText에 대한 설명, "다른 프로세스에서 컨트롤의 텍스트를 설정하려면 SetWindowText를 호출하는 대신 WM_SETTEXT 메시지를 직접 보냅니다." 나는 몇 년 전에 SetWindowText에 대해 초점을 잡는 과정을 일으키는 것에 대해 읽은 것을 기억하는 듯합니다 ... blah ... blah ... blah. 어쩌면 참조를 찾을 수 있습니다. 그러나 위의 진술은 단서가 될 수 있습니다. – AMissico

+0

SetWindowText의 결과는 0이지만 텍스트를 설정합니까? – AMissico