문제

내가 만드는른 응용 프로그램의 창의 위쪽에는지 확인을 클릭 내 응용 프로그램에서 제공하는 다른 사람의 대화로 전망이다.하이지 초점을 후 응용 프로그램 호출합니다.는 경우 다른 응용 프로그램은 더 윈도우 그들 중 하나 끝까지 함께 초점,그리고 그렇지 않으면 아무도 창(에서 찾고있는 작업 표시줄만)가 초점입니다.어디서부터 시작하는 것이 좋을 조사하는 문제입니까?

나의 코드를 만들기 위한 다른 응용 프로그램의 최상위입니다:

Process p = Process.GetProcessById(trackedProcessID);
IntPtr h = p.MainWindowHandle;
uint TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE | SWP_ASYNCWINDOWPOS;
SetWindowPos(h, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS);

와 상수를로

public static readonly uint SWP_NOMOVE = 0x0002;
public static readonly uint SWP_NOSIZE = 0x0001;
public static readonly uint SWP_ASYNCWINDOWPOS = 0x4000;
public static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
도움이 되었습니까?

해결책

관련된: 예기치 않은 행위의 과정입니다.MainWindowHandle

기본적으로 MainWindowHandle 당신에게 현재 최고-대부분의 창 프로세스의 무엇에도 불구하고 설명서를 말한다.

이유를 설명하는 주요한 창의 다른 프로세스하지 않는 반드시 얻을 초점입니다.

다른 문제이기 때문에 당신은 반환하지 않 초점을 후 응용 프로그램을 제공합니다.

실제로,정확한 당신이 무엇을 설정하는 것입 z-order.

신을 제어하려고 노력 z 순서는 보장할 수 없습니다-당신이 할 수 있는 메시지를 보내는 다른 프로세스.

다른 팁

swp_noactivate를 사용해 보셨습니까?

실제 솔루션 사용

지금까지 나는 호출 창의 창 손잡이를 대상 앱으로 보내고 완료되면 위로 밀어 붙일 수 있습니다. 다루기 위해 ~ 50 개의 창문을 가질 것이기 때문에 진짜 고통이지만 안정적으로 보입니다. 다음 접근 방식은 문제가있는 경우 전화 앱으로 돌아와서 창을 전경으로 밀어달라고 요청하는 것이지만, 사용자가 무언가를 할 수있는 가능성을 소개하는 것은 아닙니다. 메시지가 운송중인 동안 호출 앱 (동일한 전송 프로토콜에 많은 메시지가있는 경우 문제가 발생할 수 있습니다)

들어오는 창 손잡이를 사용하지 말고 대상 앱에 표시된 모든 창의 부모를 해당 핸들에 설정하면 표시 대화 상자가 호출 앱 창의 경계 내에 표시되고 필요한 경우 자르기 만하면됩니다.

질문에 대한 위의 답변에 감사드립니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top