[C#/WPF] 자신 이외의 윈도우를 맨 앞으로 가져온다

4504 단어 C#WPF

모쿠지



하고 싶은 일



자신 이외의 앱의 윈도우가, 다른 윈도우의 뒤로 돌고 있으면, 최전면에 표시시키고 싶다.

이 페이지에, 여러가지 방법이 쓰여져 있으므로, 그쪽을 보면 알고 버리지만, 스스로 해도 시도했을 때의 메모.
htps : // 도본. 네 t/vb/두 t네 t/p 로세스 s/아빠 c치아. HTML

방법


Microsoft.VisualBasic.Interaction.AppActivate() 를 사용한다.
  • 최전면에 표시시키고 싶은 앱(프로세스)의 프로세스명을 조사해 둔다.
  • 그 이름을 Process.GetProcessesByName()에 건네주어, 프로세스 (의 배열)를 취득
  • 취득한 프로세스에 대해 Microsoft.VisualBasic.Interaction.AppActivate()

  • ※그 밖에도 하는 방법은 여러가지 모습. 위 페이지를 참조하십시오.

    샘플



    예를 들면, 자신과 같은 프로세스명을 가지는 프로세스(같은 exe를 2개 기동하고 있을 때 등)를 취득해 와서, 모두를 최전면에 낸다, 라고 하는 것을 하려고 하면, 아래와 같이 된다.
    var current = Process.GetCurrentProcess();
    Process.GetProcessesByName(current.ProcessName)
    .ToList()
    .ForEach(p => Microsoft.VisualBasic.Interaction.AppActivate(p.Id));
    

    취득한 프로세스의 정보를 사용해 대상을 짜내면, 같은 exe가 벌써 기동하고 있으면, 그쪽을 최전면에 가져오는, 같은 것도 할 수 있다.
    var current = Process.GetCurrentProcess();
    Process.GetProcessesByName(current.ProcessName)
    .Where(p => p.Id != current.Id) // ←自分以外を指定(プロセス名は同じでも、プロセスIDはそれぞれ異なる)
    .ToList()
    .ForEach(p => Microsoft.VisualBasic.Interaction.AppActivate(p.Id));
    

    주의



    보통 윈도우를 가지고 있는 어플을 보통으로 기동해, 거기로부터 위와 같이 해 주면, 다른 프로세스를 최전면에 가져온다, 라고 하는 것은 할 수 있는 것 같다.

    다만 제한 사항도 있는 것 같고, 그 변이 아래에 정리되어 있었다.
    htps : // / cs. 미 c 로소 ft. 코 m / 자 jp / 우동 ws / 우안 32 / 아피 / 우 우 누세 r / n f 우 우 누세 루세 t 푹신 글쎄 우드 w w # 레마 rks


    위의 참고로 드리겠습니다. 일은 있을까 생각한다.

    나 개인적으로는, 지금까지 최전면에 가지고 이것 없었던 것은 별로 없었지만, 1회만, 아무래도 최전면에 낼 수 없는 이 케이스가 있었다.

    구체적으로는
    Windows10에서, 액션 센터 안의 토스트를 눌러 기동한 앱의 Window가 표시되기 전(Loaded 이벤트중)에서 AppActivate()를 해도, 다른 윈도우를 최전방에 낼 수 없었다.
    (기억이 분명하지 않지만, 확실히 그 경우라도, 한번 윈도우가 나오고, 버튼을 눌렀을 때에 AppActivate() 를 하면(자), 잘 되고 있었다)

    위의 제한 사항을 정리한 비고에서 생각하면 토스트가 눌려진 것을 감지하고 앱을 호출해주는 Windows의 기능이 '백그라운드 프로세스'로, 백그라운드 프로세스에서 부른 프로세스 중에서는 '다른 윈도우를 활성화하는 것 같은 처리는 할 수 없다는 것일 것이라고 예측했다. (정말 그런지 여부는 불명...)

    좋은 웹페이지 즐겨찾기