您的位置:首页 > 编程语言 > C#

c# wpf启动外部exe并嵌入到启动主窗口中运行

2016-09-26 13:24 591 查看
本文主要介绍通过c#来启动外部exe(第三方软件)并嵌入到主窗口运行,在自己的应用程序中运行

一、启动外部exe相对简单

IntPtr hcalc; //用以存储目标窗口句柄

ProcessStartInfo ps = new ProcessStartInfo();

ps.FileName = Environment.ExpandEnvironmentVariables(exePath); //exePath要启动的外部应用程序路径

ps.WorkingDirectory = @"" ; //指定工作目录以确定相对路径

Process proc = Process.Start(ps);

new Thread(new ThreadStart(() =>

{

while (hcalc == IntPtr.Zero) //循环目标窗口启动完成

{

Thread.Sleep(10);

hcalc = FindWindow(null, "发现目标窗口");

SetParent(hcalc, hpanel1);

//SendMessage(hcalc, WM_SYSCOMMAND, SC_MINIMIZE, 0);

}

})).Start();

二、嵌入到启动敞口中运行 需要调用windows API

[DllImport("user32.dll", SetLastError = true)]

static extern IntPtr FindWindow(string lpClassName, string lpWindowName); //主要用于发现外部软件窗口的句柄

[DllImport("user32.dll", SetLastError = true)]

private static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent); //该api用于嵌入到窗口中运行

[DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]

private static extern int SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam); //对外部软件窗口发送一些消息(如 窗口最大化、最小化等)

const int WM_SYSCOMMAND = 0x0112;

const int SC_CLOSE = 0xF060;

const int SC_MINIMIZE = 0xF020;

const int SC_MAXIMIZE = 0xF030;

public const uint WM_LBUTTONDOWN = 0x0201;

public const uint WM_LBUTTONUP = 0x0202;

const int BM_CLICK = 0xF5;

IntPtr hcalc = FindWindow(null, "外部窗口名称"); 发现外部窗口句柄

System.Windows.Forms.Panel p = new System.Windows.Forms.Panel();

WindowsFormsHost host = new WindowsFormsHost();

host.Child = p;

addDp.Content = host; //addDp通常表示一个容器控件 这里表示DevExpress.Xpf.Docking.DocumentPanel

IntPtr hpanel1 = p.Handle;

SetParent(hcalc, hpanel1); 把本窗口句柄与目标窗口句柄关联起来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: