2010-05-12 3 views
13

notepad.exe가 열려 있고 해당 창은 비활성 상태라고 가정합니다. 내가 그것을 활성화하는 응용 프로그램을 작성합니다. 만드는 방법?응용 프로그램 창 찾기 및 활성화

업데이트 : 창 제목은 정의되지 않았습니다. 그래서, 나는 창의 제목에 기반을 둔 FindWindow에 사용하는 것을 좋아하지 않는다.

내 응용 프로그램은 Winform C# 2.0입니다. 감사.

답변

22

SetForegroundWindow()를 P/호출해야합니다. Process.MainWindowHandle은 필요한 핸들을 제공 할 수 있습니다. 예 :

using System; 
using System.Diagnostics; 
using System.Runtime.InteropServices; 

class Program { 
    static void Main(string[] args) { 
     var prc = Process.GetProcessesByName("notepad"); 
     if (prc.Length > 0) { 
      SetForegroundWindow(prc[0].MainWindowHandle); 
     } 
    } 
    [DllImport("user32.dll")] 
    private static extern bool SetForegroundWindow(IntPtr hWnd); 
} 

실행중인 메모장 복사본이 두 개 이상인 경우 모호한 점에 유의하십시오.

+0

와우 그게 내가 찾고있는거야! 그러나 창 상태가 최소화되면 작동하지 않습니다! 어떻게 해결할 수 있습니까? – ACE

+0

Hmya, 최소화 된 창을 전경에 두는 것은 좋은 생각이 아닙니다. 질문하기 버튼을 클릭하십시오. –

+0

왜 !? 해결책을 제공해 주시겠습니까? – ACE

0

FindWindow 및/또는 EnumWindows 및 GetWindowText (제목)와 같은 Windows API 호출을 PInvoke해야합니다. 이상적으로 GeWindowThreadProcessId를 사용하여 실제 프로세스에 묶을 수도 있습니다.

+0

참고 : 창 제목은 정의되지 않습니다. 그래서, 나는 창의 제목에 기반을 둔 FindWindow에 사용하는 것을 좋아하지 않는다. –

+0

FindWindow가 맞았습니다. EnumWindows를 프로세스 관련 항목과 함께 사용하십시오. 또한 하위 창이 아닌 응용 프로그램의 기본 창을 찾으려면 스타일을 확인하십시오. – Lloyd

0

당신은 이들의 조합을 사용해야합니다 -

Toggle Process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden at runtime

와 당신은 윈도우의 클래스를 찾아서에서 검색을 할 필요가

Bring another processes Window to foreground when it has ShowInTaskbar = false

. Read more about it here.

메모장의 클래스 이름은 메모장 (따옴표 제외)입니다. Spy ++를 사용하여 확인할 수 있습니다.

참고 : 창이 실행되지 않은 경우 앱의 창을 활성화 할 수 없습니다.. API here에서 더 많은 옵션을 읽어보십시오.

+0

많은 감사하지만, FindWindow가 제목이 정의되지 않았을 때 응용 프로그램의 윈도우 (윈도우 핸들)를 찾는데 도움이 될지 궁금합니다. 감사. –

+0

내 대답을 제대로 읽지 못했습니다. 예, FindWindow가 그렇게 할 수 있습니다. – Nayan

관련 문제