2012-11-21 2 views
1

C 레거시 응용 프로그램이 있는데이 응용 프로그램은 시간이 지남에 따라 창이 열리고 서버 응용 프로그램이 닫힙니다.다른 프로세스의 창을 앞으로 가져 오기

동일한 컴퓨터에서 C# winforms 앱을 실행하고 있습니다.

내 목표는 다음과 같습니다. C# 응용 프로그램이 내 C 응용 프로그램에 win32 메시지를 보냅니다. C 앱이 창을 엽니 다. 나는 새로 열어 진 C 윈도우를 C# app의 앞쪽으로 가져 오길 바란다. 여기

현재 프로세스입니다

  • 가 C 번호는 C
  • C는
  • C 앞으로
  • 을 자신을 가지고 시도 새 창을 수신하고 열립니다로는 Win32 메시지를 보냅니다 (나는에서 궁금하네요 이 점은 C가 '내 앞에 자신을 데려 오라'는 뜻일 경우)

편집 나는 C 윈도우를 어떻게 든 앞으로 가져 오는 부분을 제외하고는 모든 것이 끝났습니다. 나는 현재 C 앱에 메시지를 보내고 같은 C# 응용 프로그램 아래에서 같은 창 (.exe)의 다른 모든 창 앞에 새 창을 엽니 다.

나는

[DllImport("user32.dll")] 
static extern bool AllowSetForegroundWindow(ServerWindowHandle); 

를 사용하여 시도하지만 그것으로 운이 없었습니다. 어떻게 든 내 C 앱에 .net 앱의 "소유권"이 있어야 할 필요가 있습니까? C# 응용 프로그램은 programinvoke를 통해 시작됩니다.

+0

제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –

+0

꽤 명확하지 않습니다. 누가 SetForegroundWindow를 호출하고 있습니까? –

+0

잘하면 설명해 줄 편집을 추가했습니다. – greggorob64

답변

0

사용중인 운영 체제는 언급하지 않았지만 일부 검색을 통해 SetForegroundWindow가 Windows 7에서 항상 작동하지 않는 것으로 나타났습니다. 해결 방법은 here입니다. 어쩌면 거기에서 몇 가지 아이디어를 가져 와서 C 또는 C# 앱에 적용하여 효과적인 해결책을 얻을 수있을 것입니다.

+0

나는 이것을 시도하고 돌아와 감사합니다. – greggorob64

+0

당신이 돌아 오지 않았다 @ greggorob64;) – NullAndVoid

+0

어, 링크가 죽었어 그래서 당신이 제공 한 솔루션을 볼 수 없습니다. 내 솔루션은 3 단계 (지금 코드를 통해 파고) 1) AllowSetForegroundWindow, 2) SetForegroundWindow, 3) SetActiveWindow – greggorob64

1

C 앱을 수정할 수 있습니까? 그렇다면 C 응용 프로그램 창 핸들에서 SetForegroundWindow으로 전화하십시오. 또는 C 앱 윈도우 핸들에 대한 참조를 얻을 수있는 경우 C# 앱에서이 호출을 할 수 있습니다.

+0

나는 C 앱이 이미 SetForegroundWindow를 호출했다고 확신한다. 문제는 C# 응용 프로그램 (C#이 메시지를 보낼 때 forground 응용 프로그램이라는 것을 알리는 것) 앞에 나타나지 않는다는 것입니다. – greggorob64

관련 문제