C# 像孩子一样在我的应用程序中调用程序窗口

C# 像孩子一样在我的应用程序中调用程序窗口,c#,.net,C#,.net,我有一个应用程序,我想调用另一个程序,比如 所以当我最小化记事本或最大化记事本时,它必须位于 我的申请书 我打开应用程序最大化,并希望像孩子一样打开记事本 我使用这个代码 [DllImport("user32.dll")] private static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent); [DllImport("User32")] private static extern int ShowWind

我有一个应用程序,我想调用另一个程序,比如 所以当我最小化记事本或最大化记事本时,它必须位于 我的申请书

我打开应用程序最大化,并希望像孩子一样打开记事本

我使用这个代码

 [DllImport("user32.dll")]
 private static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

 [DllImport("User32")]
 private static extern int ShowWindow(IntPtr hWnd, int nCmdShow);

 private const int SW_MAXIMIZE = 3;

 Process p = new Process();


 private void frmMain_Load(object sender, EventArgs e)
  {
   p.StartInfo.FileName = "NOTEPAD.EXE";
   p.StartInfo.UseShellExecute = true;
   p.Start();
   // change parent window and maximize inside the form
   SetParent(p.MainWindowHandle, this.Handle);
   ShowWindow(p.MainWindowHandle, SW_MAXIMIZE);
  }

但是不要工作!!!()

做到这一点是可能的,但要做到这一点却极其困难。陈雷蒙(Raymond Chen)详细介绍了该主题:

一位客户联络员询问使用Set-Parent是否合法 在属于的窗口之间创建父/子关系 不同的过程

是的,从技术上讲是合法的,但是如果你创建一个交叉过程 父母/子女或所有者/所有者关系,其后果可能非常严重 难以管理。如果有人这样做,他们几乎不可能管理 或者所涉及的两个窗口都不知道它正在参与 跨进程窗口树。(我经常在上下文中看到这个问题 有人想抓住属于另一进程的窗口 并强行将其移植到他们自己的过程中。另一个过程是 完全没有准备好以这种方式操纵其窗口,以及 事情可能会停止运转。事实上,事情肯定会停止运转 如果将另一个窗口从顶级窗口更改为子窗口 窗户。)


所以,你可以这样做。但这并不容易,绝对不推荐。这是很难做到的C++,但从管理的世界,你只是要求痛苦。我们能给你的最明智的建议就是为你的问题找到一个不同的解决方案。

这是可能的,但要想把它做好是极其困难的。陈雷蒙(Raymond Chen)详细介绍了该主题:

一位客户联络员询问使用Set-Parent是否合法 在属于的窗口之间创建父/子关系 不同的过程

是的,从技术上讲是合法的,但是如果你创建一个交叉过程 父母/子女或所有者/所有者关系,其后果可能非常严重 难以管理。如果有人这样做,他们几乎不可能管理 或者所涉及的两个窗口都不知道它正在参与 跨进程窗口树。(我经常在上下文中看到这个问题 有人想抓住属于另一进程的窗口 并强行将其移植到他们自己的过程中。另一个过程是 完全没有准备好以这种方式操纵其窗口,以及 事情可能会停止运转。事实上,事情肯定会停止运转 如果将另一个窗口从顶级窗口更改为子窗口 窗户。)


所以,你可以这样做。但这并不容易,绝对不推荐。这是很难做到的C++,但从管理的世界,你只是要求痛苦。我们能给你的最明智的建议就是为你的问题找到一个不同的解决方案。

这是可能的,但要想把它做好是极其困难的。陈雷蒙(Raymond Chen)详细介绍了该主题:

一位客户联络员询问使用Set-Parent是否合法 在属于的窗口之间创建父/子关系 不同的过程

是的,从技术上讲是合法的,但是如果你创建一个交叉过程 父母/子女或所有者/所有者关系,其后果可能非常严重 难以管理。如果有人这样做,他们几乎不可能管理 或者所涉及的两个窗口都不知道它正在参与 跨进程窗口树。(我经常在上下文中看到这个问题 有人想抓住属于另一进程的窗口 并强行将其移植到他们自己的过程中。另一个过程是 完全没有准备好以这种方式操纵其窗口,以及 事情可能会停止运转。事实上,事情肯定会停止运转 如果将另一个窗口从顶级窗口更改为子窗口 窗户。)


所以,你可以这样做。但这并不容易,绝对不推荐。这是很难做到的C++,但从管理的世界,你只是要求痛苦。我们能给你的最明智的建议就是为你的问题找到一个不同的解决方案。

这是可能的,但要想把它做好是极其困难的。陈雷蒙(Raymond Chen)详细介绍了该主题:

一位客户联络员询问使用Set-Parent是否合法 在属于的窗口之间创建父/子关系 不同的过程

是的,从技术上讲是合法的,但是如果你创建一个交叉过程 父母/子女或所有者/所有者关系,其后果可能非常严重 难以管理。如果有人这样做,他们几乎不可能管理 或者所涉及的两个窗口都不知道它正在参与 跨进程窗口树。(我经常在上下文中看到这个问题 有人想抓住属于另一进程的窗口 并强行将其移植到他们自己的过程中。另一个过程是 完全没有准备好以这种方式操纵其窗口,以及 事情可能会停止运转。事实上,事情肯定会停止运转 如果将另一个窗口从顶级窗口更改为子窗口 窗户。)


所以,你可以这样做。但这并不容易,绝对不推荐。这是很难做到的C++,但从管理的世界,你只是要求痛苦。我们能给你的最明智的建议是为你的问题找到一个不同的解决方案。

不,我没有错误,当我最小化或最大化记事本时,它必须在我的应用程序中。你不能用C#来做这件事。你可以用C++来实现。如果你只是为了好玩而尝试,那么我建议你去玩别的东西!谢谢,我想要打开记事本,没有用户可以在应用程序中打开另一个进程。不,我没有得到错误,当我最小化记事本或最大化记事本时,它必须在我的应用程序中。你不能用C。