[c#] .Net에서 창을 항상 맨 위에 유지하는 방법은 무엇입니까?

다른 프로그램에서 매크로를 실행하는 C # winforms 앱이 있습니다. 다른 프로그램은 계속해서 창을 띄우고 일반적으로 더 나은 단어가 없기 때문에 상황을 미치게 만듭니다. 프로세스 실행을 중지하는 취소 버튼을 구현하고 싶지만 창이 맨 위에 유지되지 않는 것 같습니다. C #에서 어떻게합니까?

편집 : 나는 TopMost = true를 시도했습니다; ,하지만 다른 프로그램은 계속해서 상단에 자체 창을 표시합니다. n 밀리 초마다 내 창을 맨 위로 보내는 방법이 있습니까?

편집 :이 문제를 해결 한 방법은 두 번 클릭하여 프로세스를 취소하는 시스템 트레이 아이콘을 추가하는 것입니다. 시스템 트레이 아이콘이 가려지지 않습니다. 응답 해 주신 모든 분들께 감사드립니다. 왜 ‘슈퍼 온탑’창이 없는지에 대한 기사를 읽었습니다. 논리적으로 작동하지 않습니다.



답변

Form.TopMost 다른 프로그램이 최상위 창을 생성하지 않는 한 작동합니다.

다른 프로세스의 새 최상위 창으로 덮이지 않는 창을 만들 수있는 방법이 없습니다. Raymond Chen은 이유를 설명했습니다 .


답변

WinForms 응용 프로그램을 “Always on Top”으로 만들려고했지만 “TopMost”를 설정해도 아무런 효과가 없었습니다. WinAmp가이 작업을 수행하기 때문에 가능하다는 것을 알고있었습니다 (다른 여러 응용 프로그램과 함께).

내가 한 것은 “user32.dll”을 호출하는 것이 었습니다. 나는 그렇게하는 것에 대해 아무런 불만이 없었고 훌륭하게 작동합니다. 어쨌든 옵션입니다.

먼저 다음 네임 스페이스를 가져옵니다.

using System.Runtime.InteropServices;

클래스 선언에 몇 가지 변수를 추가합니다.

private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
private const UInt32 SWP_NOSIZE = 0x0001;
private const UInt32 SWP_NOMOVE = 0x0002;
private const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;

user32.dll 함수에 대한 프로토 타입을 추가합니다.

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

그런 다음 코드에서 (Form_Load ()에 호출을 추가했습니다) 호출을 추가하십시오.

SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS);

도움이 되었기를 바랍니다. 참고


답변

“미쳐가는 것”이 ​​각 창이 다른 창에서 계속 초점을 훔친다는 의미라면 TopMost는 문제를 해결하지 못할 것입니다.

대신 다음을 시도하십시오.

CalledForm.Owner = CallerForm;
CalledForm.Show();

이것은 초점을 훔치지 않고 ‘아이’형태를 ​​보여줄 것입니다. 부모가 활성화되었거나 포커스가있는 경우에도 자식 양식은 부모 위에 유지됩니다. 이 코드는 소유자 양식 내에서 자식 양식의 인스턴스를 만든 경우에만 쉽게 작동합니다. 그렇지 않으면 API를 사용하여 소유자를 설정해야 할 수 있습니다.


답변

Form.TopMost 설정


답변

나는 순간적으로 5 분의 경과가 있었고 다음과 같이 전체 양식을 지정하는 것을 잊었습니다.

  myformName.ActiveForm.TopMost = true;

그러나 내가 정말로 원했던 것은 이것이었다!

  this.TopMost = true;


답변

양식의 .TopMost속성을 true로 설정 합니다.

항상 이런 식으로 남겨두고 싶지는 않을 것입니다. 외부 프로세스가 시작될 때 설정하고 완료되면 다시 넣으십시오.


답변

이 문제를 해결 한 방법은 취소 옵션이있는 시스템 트레이 아이콘을 만드는 것입니다.