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); 把本窗口句柄与目标窗口句柄关联起来
一、启动外部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); 把本窗口句柄与目标窗口句柄关联起来
相关文章推荐
- C#将外部窗口嵌入到WPF控件当中
- C# 以嵌入到窗体的方式打开外部exe
- zendframework搭建为什么cmd窗口是这样的,"php.exe"' 不是内部或外部命令,也不是可运行的程序
- C# 以嵌入到窗体的方式打开外部exe
- C#将exe运行程序嵌入到自己的winform窗体中
- C#(WPF)程序将Debug中的.exe文件放入注册表中启动,获取错误的当前路径--解决方案
- C#将exe运行程序嵌入到自己的winform窗体中
- C#WindowForm程序中直接启动外部exe文件
- C#将exe运行程序嵌入到自己的winform窗体中
- C#(WPF)程序将Debug中的.exe文件放入注册表中启动,获取错误的当前路径--解决方案
- ●Winform拖动无边框窗口、播放音频、启动外部exe程序
- C#将exe运行程序嵌入到自己的winform窗体中
- WPF 加载exe执行文件 | WPF c#实现窗口全屏
- C#【Winform】带参启动外部EXE
- C#启动一个外部程序(1)
- C# 启动外部程序的几种方法
- 用C#给程序加启动画面并只允许一个应用程序实例运行
- C# 启动外部程序的几种方法
- C#启动一个外部程序的方法-ShellExecute
- C# 启动外部程序的几种方法