[C#/WPF] 자신 이외의 윈도우를 맨 앞으로 가져온다
모쿠지
하고 싶은 일
자신 이외의 앱의 윈도우가, 다른 윈도우의 뒤로 돌고 있으면, 최전면에 표시시키고 싶다.
이 페이지에, 여러가지 방법이 쓰여져 있으므로, 그쪽을 보면 알고 버리지만, 스스로 해도 시도했을 때의 메모.
htps : // 도본. 네 t/vb/두 t네 t/p 로세스 s/아빠 c치아. HTML
방법
Microsoft.VisualBasic.Interaction.AppActivate()
를 사용한다.
자신 이외의 앱의 윈도우가, 다른 윈도우의 뒤로 돌고 있으면, 최전면에 표시시키고 싶다.
이 페이지에, 여러가지 방법이 쓰여져 있으므로, 그쪽을 보면 알고 버리지만, 스스로 해도 시도했을 때의 메모.
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의 기능이 '백그라운드 프로세스'로, 백그라운드 프로세스에서 부른 프로세스 중에서는 '다른 윈도우를 활성화하는 것 같은 처리는 할 수 없다는 것일 것이라고 예측했다. (정말 그런지 여부는 불명...)
Reference
이 문제에 관하여([C#/WPF] 자신 이외의 윈도우를 맨 앞으로 가져온다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tera1707/items/c6e2884d48248c8f3ba7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
var current = Process.GetCurrentProcess();
Process.GetProcessesByName(current.ProcessName)
.ToList()
.ForEach(p => Microsoft.VisualBasic.Interaction.AppActivate(p.Id));
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의 기능이 '백그라운드 프로세스'로, 백그라운드 프로세스에서 부른 프로세스 중에서는 '다른 윈도우를 활성화하는 것 같은 처리는 할 수 없다는 것일 것이라고 예측했다. (정말 그런지 여부는 불명...)
Reference
이 문제에 관하여([C#/WPF] 자신 이외의 윈도우를 맨 앞으로 가져온다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tera1707/items/c6e2884d48248c8f3ba7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)