求教:winform窗体嵌入第三方程序的窗体

我和我的代码互怼 我和我的代码互怼 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位大佬下午好,如题所示,我在摆弄的时候的确可以做到一些窗体嵌入到我的winform里面,如以下代码:
在winform里面添加一个按钮和panel控件,代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp5
{
public partial class Form1 : Form
{
[DllImport("User32.dll ", EntryPoint = "SetParent")]
private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
[DllImport("user32.dll ", EntryPoint = "ShowWindow")]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);


public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Process p = new Process();
p.StartInfo.FileName = "cmd";
p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
p.Start();
System.Threading.Thread.Sleep(500);
SetParent(p.MainWindowHandle, panel1.Handle);
ShowWindow(p.MainWindowHandle, 3);
}

}
}



单击按钮后的确可以进行显示与操作,但是我遇到以下问题,并希望按照我说希望的运行:
1、打开的cmd首先在系统桌面上显示,之后才被装到我的winform里面,可以把System.Threading.Thread.Sleep(500)这里的500改成2000,这样会看得更清楚。我希望是指定的程序本来就在我的winform里面,而不是先在系统运行再装到winform里面;
2、执行的程序如果改成视频路径,那么画面简直要卡死,搞不清楚问题,这里是缺什么声明吗,还是哪里不对呢?
3、如果我在winform里面的cmd里面执行一个程序,这个程序就会在系统桌面弹出来,而不是在我的winform里面,求解怎么弄
...全文

相关推荐

C# WInForm窗体嵌入外部EXE程序.zip

C# WInForm窗体嵌入外部EXE程序

xcccck

winform把exe程序嵌套在窗体中

winform把将外部exe程序作为窗体的一部分,嵌套在自己定义的窗体中。

llddyy123wq

Winform窗体嵌入WPF程序并发送消息

Winform窗体嵌入WPF程序并发送消息

周末快讯

winform窗体中嵌入网页(DHTML代码和winfrom应用程序交互)

C#winform 窗体与Webbrowser控件的相互交互

myfreely

C# Winform窗体内嵌入第三方应用窗体源码,可自适应容器大小

Winform实现窗体内嵌入第三方应用窗体,只需要知道窗体名称,即可将第三方应用的窗体嵌入到自己的程序中,使用WinForm的Panel控件作为其父容器,并且第三方窗体仍然保持原有的功能,如点击,输入等,可以随着自己的应用最大最小化,作为自己应用的一部分存在。 这一版优化了很长时间,为了实现在父容器大小改变时,第三方应用的大小可以自适应,网上的很多做法都会造成卡顿或者闪烁,最后是我结合实际应用,自己总结经验写出了这一版无卡顿,闪烁少的代码,实属不易,希望大家能够支持。 使用时记得更改后台代码里面的windowName参数。 需要提前打开第三方程序,或者使用C#代码打开第三方程序后,点击嵌入窗体按钮,将第三方窗体嵌入自己窗体的Panel中,如果你的窗体,容器大小不会改变,可以不设置timer,这样能避免闪烁现象发生。

XX_YYDS
评论 3
收藏 已收藏
分享
返回顶部
我和我的代码互怼
C# 111,128 成员 642,537 内容