2010-12-16 3 views
0

다음과 같은 시나리오가 있습니다.WM_COPYDATA를 보내지 만받는 쪽에서 WM_ACTIVATEAPP을 가져 오는 중

내 앱이 명령 줄에서 데이터를 가져옵니다.

처음 실행하면 내 응용 프로그램은 항상 하나의 인스턴스 만 실행하고 필요하지 않을 때 양식을 숨기는 대신 명시 적으로 종료 사실을 알릴 때까지 인스턴스가 메모리에 저장됩니다.

사용자가 두 번째로 앱을 실행하려고하면 프로세스가 시작되어 메모리에 다른 메모리가 있는지 확인하고 이것이 사실이라면 WM_COPYDATA 메시지를 메모리의 프로세스에 보낸 데이터와 함께 보냅니다 명령 행을 종료하고 종료합니다.

앱을 실행하는 사용자는 모두 정상적으로 작동합니다.

"Add-in"을 사용하기 위해 Microsoft Word 2003 도구 모음에서 실행해야했습니다. 문제는 응용 프로그램에서 해당 추가 기능 (프로세스 클래스를 사용하여) 시작될 때 이미 메모리에서 WM_COPYDATA 대신 WM_ACTIVATEAPP 메시지를 가져 오는 것, 그래서 필요한 데이터를 가져올 수 없다는 것입니다. 프로세스가 추가 기능에 의해 시작되었습니다.

왜 이런 일이 일어나고 어떻게 수정해야하는지에 대해서는 잘 모릅니다. 나는 몇 시간 동안 봤어도 아무 도움도 ...

아무도 도와 줄 수 있습니까?

답변

1

WM_ACTIVATEAPP 메시지를받는 것은 Windows가 보내는 일반적인 알림의 일부인 상당히 정상입니다. 첫 번째 메시지가 인 경우 WM_COPYDATA 메시지가 계속 표시된다고 가정하지 마십시오. 당신이 그것을 전혀 얻지 못한다면 메시지를 보내는 데 사용했던 윈도우 핸들이 잘못되었다는 것입니다. 어느 것이 매우 일반적인 문제이며, 창을 정확하게 찾는 것이 쉽지 않습니다.

.NET Framework는 이미 두 번째 인스턴스에서 명령 줄을 검색 할 수있는 단일 인스턴스 앱을 지원합니다. 대신 사용하는 것이 좋습니다. 이을 확인하십시오.

+0

늦은 대답이지만 여기에 있습니다. 답변 : 고마워요. 나는 단지 첫 번째 메시지를 받고 있었고, 나는 그들 모두를 얻고 올바른 것을 찾으려고 노력해야한다. 귀하의 제안에 대해, 나는 C# 응용 프로그램에서 VB 물건을 사용하고 MSMQ를 사용하여 끝내지 못했습니다. 아직도, 나는 너에게 묻는다. 나는 모든 메시지를 어떻게 얻습니까? WndProc은 한 번만 불려서 한 메시지 만 받았습니다 ... 어느 쪽이든, 도와 줘서 고마워. :) +1 추신 - MSMQ를 찾는데 도움이되는 메시지와 제안에 대해 아마 도움이 되었기 때문에 대답으로 표시했습니다. – osiris

+0

이것이 "VB stuff"이라고 생각하게 만드는 이유는 무엇입니까? 이것은 C#으로 작성되었습니다. .NET에서 언어를 자유롭게 혼합 할 수있는 기능은 버그가 아니라 기능입니다. 그것은 전염성이 없습니다. –