2010-04-22 3 views
3

C# 응용 프로그램에서 다른 응용 프로그램을 시작하려고합니다. 응용 프로그램의 메인 폼 안에이 응용 프로그램을 표시 할 수있는 방법이 있습니까?C#에서 다른 응용 프로그램 시작

감사합니다,

+1

합니다. ActiveX 객체 (예 : Word 또는 Internet Explorer)로 인스턴스화 할 수 있습니까? –

답변

6

당신은 Process.Start(...)를 사용하여 다른 응용 프로그램을 시작할 수 있습니다

Process.Start(@"C:\Path\OtherApp.exe"); 

은 양식 내에서 응용 프로그램을 포함 양식에서이 CodeProject의 article that demos a technique for hosting other application's windows을 확인합니다.

+1

그는 자신의 애플리케이션에 다른 애플리케이션을 임베드하는 것에 대해 질문합니다. – Oded

+0

@Oded : 이것이 바로 CodeProject 기사 링크입니다. 내가 더 명확하게 편집 할 것입니다. –

0

일반적으로 내면에는 타사 응용 프로그램을 표시 할 수 없습니다. 대상 응용 프로그램이 콘솔 인터페이스를 지원하는 경우 대상 응용 프로그램의 콘솔 명령에 GUI 명령을 변환하는이 응용 프로그램에 대한 고유 한 인터페이스를 만듭니다.

1

당신은 보충을 통해 이것을 시도 할 수 있습니다. MSDN에서 WPF에 대해 설명하는 곳 : Composite "shell" application을 참조하십시오.

기술 자체는 WinForms와 동일합니다. 앱에 호스트 영역이 있어야합니다. 대상 응용 프로그램의 최상위 창 스타일을 WS_CHILD로 변경합니다. SetParent()를 호출하여 대상 창의 부모를 호스트 영역으로 변경합니다.

Win32에서는 최상위 창에만 메뉴가 있습니다. 따라서 WS_CHILD로 변경하면 메뉴가 제거됩니다.

1

당신은 그 방법으로 작업을 수행 할 수 있습니다

당신이 당신의 형태 메모장 응용 프로그램이 이런 식으로
[DllImport("user32.dll")] 
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); 

    [DllImport("user32.dll")] 
    static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 

    [DllImport("user32.dll", SetLastError = true)] 
    private static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint); 

    [DllImport("user32.dll", SetLastError = true)] 
    static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab); 

    [DllImport("user32.dll")] 
    static extern IntPtr SetActiveWindow(IntPtr hWnd); 


    private const int GWL_STYLE = (-16); 
    private const int WS_VISIBLE = 0x10000000; 
    private const int WS_MAXIMIZE = 0x01000000; 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.SuspendLayout(); 

     Process notepad = new Process(); 
     ProcessStartInfo psi = new ProcessStartInfo("notepad.exe"); 
     psi.WindowStyle = ProcessWindowStyle.Normal; 
     notepad.StartInfo = psi; 

     notepad.Start(); 

     this.ResumeLayout(); 

     notepad.WaitForInputIdle(3000); 

     IntPtr old = SetParent(notepad.MainWindowHandle, this.Handle); 

     SetWindowLong(notepad.MainWindowHandle, GWL_STYLE, WS_VISIBLE + WS_MAXIMIZE); 
     MoveWindow(notepad.MainWindowHandle, 100, 100, 400, 400, true); 

     SetActiveWindow(notepad.MainWindowHandle); 
     SwitchToThisWindow(notepad.MainWindowHandle, true); } 

)이 시작하려는 응용 프로그램에 따라 다릅니다

관련 문제