C# 응용 프로그램에서 다른 응용 프로그램을 시작하려고합니다. 응용 프로그램의 메인 폼 안에이 응용 프로그램을 표시 할 수있는 방법이 있습니까?C#에서 다른 응용 프로그램 시작
감사합니다,
C# 응용 프로그램에서 다른 응용 프로그램을 시작하려고합니다. 응용 프로그램의 메인 폼 안에이 응용 프로그램을 표시 할 수있는 방법이 있습니까?C#에서 다른 응용 프로그램 시작
감사합니다,
당신은 Process.Start(...)를 사용하여 다른 응용 프로그램을 시작할 수 있습니다
Process.Start(@"C:\Path\OtherApp.exe");
은 양식 내에서 응용 프로그램을 포함 양식에서이 CodeProject의 article that demos a technique for hosting other application's windows을 확인합니다.
그는 자신의 애플리케이션에 다른 애플리케이션을 임베드하는 것에 대해 질문합니다. – Oded
@Oded : 이것이 바로 CodeProject 기사 링크입니다. 내가 더 명확하게 편집 할 것입니다. –
일반적으로 내면에는 타사 응용 프로그램을 표시 할 수 없습니다. 대상 응용 프로그램이 콘솔 인터페이스를 지원하는 경우 대상 응용 프로그램의 콘솔 명령에 GUI 명령을 변환하는이 응용 프로그램에 대한 고유 한 인터페이스를 만듭니다.
당신은 보충을 통해 이것을 시도 할 수 있습니다. MSDN에서 WPF에 대해 설명하는 곳 : Composite "shell" application을 참조하십시오.
기술 자체는 WinForms와 동일합니다. 앱에 호스트 영역이 있어야합니다. 대상 응용 프로그램의 최상위 창 스타일을 WS_CHILD로 변경합니다. SetParent()를 호출하여 대상 창의 부모를 호스트 영역으로 변경합니다.
Win32에서는 최상위 창에만 메뉴가 있습니다. 따라서 WS_CHILD로 변경하면 메뉴가 제거됩니다.
당신은 그 방법으로 작업을 수행 할 수 있습니다
당신이 당신의 형태 메모장 응용 프로그램이 이런 식으로[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); }
)이 시작하려는 응용 프로그램에 따라 다릅니다
합니다. ActiveX 객체 (예 : Word 또는 Internet Explorer)로 인스턴스화 할 수 있습니까? –