首页 新闻 会员 周边 捐助

C#如何添加子进程并在任务管理中显示(Edge的多进程方式)

0
悬赏园豆:50 [待解决问题] 浏览: 57次

请问C#如何添加子进程并在任务管理中有显示,参考Edge的多进程例子:

这里这个Edge应用下有多个子进程,请问如何在C#中添加类似的进程并在任务管理器中显示出来。

lzhdim的主页 lzhdim | 小虾三级 | 园豆:602
提问于:2025-02-20 14:49
< > 人人可用的开源BI工具
分享
所有回答(2)
0

Winform无法实现,需要借用win api。


		[DllImport("user32.dll")]
		private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndParent);
		private Process childProcess;
		public Form1()
		{
			InitializeComponent();

		}
		private void button1_Click(object sender, System.EventArgs e)
		{
			// 启动一个新的子进程
			childProcess = new Process();
			childProcess.StartInfo.FileName = "cmd.exe";
			childProcess.StartInfo.UseShellExecute = false;
			childProcess.StartInfo.CreateNoWindow = true;  // 不显示CMD窗口

			// 启动进程
			childProcess.Start();

			// 等待进程启动完成
			//childProcess.WaitForInputIdle();

			// 将子进程附加到当前WinForms进程
			SetParent(childProcess.MainWindowHandle, this.Handle);
		}

echo_lovely | 园豆:1588 (小虾三级) | 2025-02-20 16:01

有没有完整的解决方案代码?你上面那个MultiThreads(32位)就是多进程的吧???

请将解决方案代码发我邮箱,谢谢:

lzhdim@163.com

支持(0) 反对(0) lzhdim | 园豆:602 (小虾三级) | 2025-02-20 16:53

@lzhdim: 我就说你这个id怎么那么熟悉,我看过你很多篇文章!

支持(0) 反对(0) echo_lovely | 园豆:1588 (小虾三级) | 2025-02-20 17:28

试过SetParent,但是是在Winform里的,能嵌入到主窗体的Panel里,但是设置父子进程无效,所以来问问。。。

支持(0) 反对(0) lzhdim | 园豆:602 (小虾三级) | 2025-02-20 17:41

@echo_lovely: ChatGPT那个打不开,哈哈。。。

支持(0) 反对(0) lzhdim | 园豆:602 (小虾三级) | 2025-02-20 17:42

@lzhdim: 嵌入到主窗体Panel里的,我问GPT了,它回复我比较麻烦,我没有做测试

支持(0) 反对(0) echo_lovely | 园豆:1588 (小虾三级) | 2025-02-21 08:09

@lzhdim:
这是GPT回复我的代码,它尝试将记事本附加到winform:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;

public partial class MainForm : Form
{
    [DllImport("user32.dll")]
    private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndParent);

    [DllImport("user32.dll")]
    private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    [DllImport("user32.dll")]
    private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int Width, int Height, uint uFlags);

    const int SW_SHOWNORMAL = 1;

    private Process childProcess;

    public MainForm()
    {
        InitializeComponent();
    }

    private void btnStartProcess_Click(object sender, EventArgs e)
    {
        // 启动一个新的子进程
        childProcess = new Process();
        childProcess.StartInfo.FileName = "notepad.exe";
        childProcess.StartInfo.UseShellExecute = true;  // 使用Shell执行
        childProcess.StartInfo.CreateNoWindow = false;  // 显示Notepad窗口

        // 启动进程
        childProcess.Start();

        // 等待Notepad进程启动完成并获取窗口句柄
        childProcess.WaitForInputIdle();  // 这里需要等待Notepad进程准备好

        // 获取Notepad的主窗口句柄
        IntPtr notepadHandle = childProcess.MainWindowHandle;

        // 设置父窗口
        SetParent(notepadHandle, this.Handle);

        // 将Notepad窗口大小调整以适应父窗口
        SetWindowPos(notepadHandle, IntPtr.Zero, 0, 0, this.Width, this.Height, 0);

        // 显示Notepad窗口
        ShowWindow(notepadHandle, SW_SHOWNORMAL);
    }
}

我记得楼主你搞过很多这种windows api的项目啊,应该比较熟悉,我班门弄斧了

支持(0) 反对(0) echo_lovely | 园豆:1588 (小虾三级) | 2025-02-21 08:12
0

这个分组不是单纯的父子关系,看看这个
https://cloud.tencent.com/developer/article/2259513

www378660084 | 园豆:1344 (小虾三级) | 2025-02-21 11:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册
Top