C# 嵌入第三方EXE界面到panel中

C#可以通过windows API,将第三方程序嵌入到panel中,并且可以隐藏程序边框。
问题:
焦点在内部程序时,主窗口失去焦点;
与内部EXE如何通讯?

代码如下:

public partial class FrmIn : Form
{
    public FrmIn()
    {
        InitializeComponent();
    }

    [DllImport("User32.dll", EntryPoint = "SetParent")]
    private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

    [DllImport("user32.dll", EntryPoint = "ShowWindow")]
    private static extern int ShowWindow(IntPtr hwnd, int nCmdShow);

    [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")]
    public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
    [DllImport("user32.dll")]
    public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

    const int WS_THICKFRAME = 262144;
    const int WS_BORDER = 8388608;
    const int GWL_STYLE = -16;

    private Process proApp = null;

    private void FrmIn_Load(object sender, EventArgs e)
    {
        string fexePath = @"notepad.exe"; // 外部exe位置

        proApp = new Process();
        proApp.StartInfo.FileName = fexePath;
        proApp.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
        proApp.Start();
        proApp.WaitForInputIdle();

        Thread.Sleep(1000);

        IntPtr wnd = proApp.MainWindowHandle;

        Int32 wndStyle = GetWindowLong(wnd, GWL_STYLE);
        wndStyle &= ~WS_BORDER;
        wndStyle &= ~WS_THICKFRAME;
        SetWindowLong(wnd, GWL_STYLE, wndStyle);

        SetParent(proApp.MainWindowHandle, panel1.Handle);
        ShowWindow(proApp.MainWindowHandle, (int)ProcessWindowStyle.Maximized);
    }

    private void panel1_SizeChanged(object sender, EventArgs e)
    {
        if (this.proApp == null)
        {
            return;
        }

        if (this.proApp.MainWindowHandle != IntPtr.Zero)
        {
            MoveWindow(this.proApp.MainWindowHandle, 0, 0, panel1.Width, panel1.Height, true);
        }
    }
}

原文地址:https://www.cnblogs.com/zjfree/p/11811263.html

时间: 2024-10-09 06:44:43

C# 嵌入第三方EXE界面到panel中的相关文章

Qt界面中嵌入其他exe程序的界面,使用Qt5

下面用一个小例子来演示如何在Qt的界面中嵌入其他exe程序的界面,最终效果如下图所示.本文参考了 http://blog.csdn.net/jiaoyaziyang/article/details/49802993,感谢原作者. 下面是具体的实现方法,用Windows自带的计算器程序做例子.主要的思路就是获取到计算器程序的窗口类名称,然后在Qt中利用QWindow的静态函数fromWinId,创建出QWindow对象,然后将这个对象放到一个QWidget中. 首先是获取计算器程序的窗口类名称,主

C#将exe运行程序嵌入到自己的winform窗体中

以下例子是将Word打开,然后将它嵌入到winform窗体中,效果如下图:C将exe运行程序嵌入到自己的winform窗体中 - kingmax_res - iSport注意:该方法只适用于com的exe(如word,Excel之类),.net的编的exe就不能用这用方法嵌入到窗体中. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Syst

WPF程序将DLL嵌入到EXE的两种方法

WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了>可以参看地下地址(两篇是一样的): 开源中国 http://my.oschina.net/chinesedragon/blog/308336 CNBLOGS http://www.cnblogs.com/luoshupeng/p/3946635.html 引言 前几一写了一个小工具----<Vi

WPF编程,获取句柄将外部程序嵌入到WPF界面。

原文:WPF编程,获取句柄将外部程序嵌入到WPF界面. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/86648114 1.增加引用 2.增加命名空间 ? ? ? ? xmlns:wfh="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" ? ? ? ? xmlns:wfc=&

完善ext.grid.panel中的查询功能(紧接上一篇)

今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这样虽然实现了,但是多写了不少代码,之后网上找到了方法. 代码如下:请结合昨天的代码看,否则你是看不明白的 /*我们操作查询的功能键是放在grid的tabbar中的,下面就是创建的grid的tabbar,其中查询操作就在其中,此代码紧接上一篇文章,这个类上一篇文章中也有,但是没有实现查询功能,红色字体

c#在一个窗体的panel中添加另一个窗体

以下步骤实现将Form2放置在Form1中Panel中显示: (1)在Visual Studio中新建一个“Windows 窗体应用程序”项目 (2)在项目中添加窗体Form2,为演示效果,窗体的背景设置为Gray (3)在Form1上布置一个Panel控件 (4)Form1的窗体代码Form1.cs using System;using System.Windows.Forms; namespace WindowsFormsApplication1{    public partial cla

在第三方控件 super Grid 中想要删除选中的行

代码: DialogResult result = MessageBox.Show("确定移除选中词吗?", "移除选中",MessageBoxButtons.YesNo,MessageBoxIcon.Information); if (result == DialogResult.Yes) { SelectedElementCollection grid = SuperGrid.PrimaryGrid.GetSelectedRows(); foreach (Gri

httpd.exe你的电脑中缺失msvcr110.dll怎么办(WIN2008服务器环境装WAMP2.5出现的问题)

httpd.exe你的电脑中缺失msvcr110.dll怎么办 去微软官方下载相应的文件 1 打开上面说的网址 Download and install, if you not have it already, from: http://www.microsoft.com/en-us/download/details.aspx?id=30679 点击下载,记得选择中文简单然后点击 下载 2 选择相应的文件类型进行下载,如果 你的电脑 是32位就下载x86版. 如果 你的明心是64位就下载x64版

C# TreeView 拖拽节点到另一个容器Panel中简单实现

C# TreeView 拖拽节点到另一个容器Panel中简单实现 用了这么久C#拖拽功能一直没有用到也就没用过,今天因为项目需要,领导特地给我简单讲解了下拖拽功能,真是的大师讲解一点通啊.特地写一篇博客记录下,分享给大家!也方便以后自己查看. 1.拖拽功能分析 拖拽功能分析其实就三个字:选-->拖-->放  什么意思,请看下图 本图大概就是将左侧TreeView中的节点拖拽到右侧的Panel控件中,然后根据业务处理想要的效果 拖拽过程分为三步: 将左侧的TreeView的节点选中 拖拽选中的节