真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#將exe運行程序嵌入到自己的winform窗體中-創(chuàng)新互聯(lián)

信息來自: http://blog.csdn.net/bigeyescat/article/details/5966540

成都創(chuàng)新互聯(lián)公司:成立與2013年為各行業(yè)開拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為近1000家公司企業(yè)提供了專業(yè)的做網(wǎng)站、網(wǎng)站制作、網(wǎng)頁設(shè)計和網(wǎng)站推廣服務(wù), 按需制作由設(shè)計師親自精心設(shè)計,設(shè)計的效果完全按照客戶的要求,并適當(dāng)?shù)奶岢龊侠淼慕ㄗh,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據(jù)客戶的實際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。

以下例子是將Word打開,然后將它嵌入到winform窗體中,效果如下圖:

注意:該方法只適用于com的exe(如word,Excel之類),.net的編的exe就不能用這用方法嵌入到窗體中。

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

namespace WindowsTest
{
public partial class Form2 : Form
    {
        Process process= null;
        IntPtr appWin;
private string exeName = "";

        [DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId", SetLastError = true,
            CharSet= CharSet.Unicode, ExactSpelling = true,
            CallingConvention= CallingConvention.StdCall)]

private static extern long GetWindowThreadProcessId(long hWnd, long lpdwProcessId);

        [DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);


        [DllImport("user32.dll", SetLastError = true)]
private static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent);


        [DllImport("user32.dll", EntryPoint = "GetWindowLongA", SetLastError = true)]
private static extern long GetWindowLong(IntPtr hwnd, int nIndex);


        [DllImport("user32.dll", EntryPoint = "SetWindowLongA", SetLastError = true)]
private static extern long SetWindowLong(IntPtr hwnd, int nIndex, long dwNewLong);

//private static extern int SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong);
        [DllImport("user32.dll", SetLastError = true)]
private static extern long SetWindowPos(IntPtr hwnd, long hWndInsertAfter, long x, long y, long cx, long cy, long wFlags);

        [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", EntryPoint = "PostMessageA", SetLastError = true)]
private static extern bool PostMessage(IntPtr hwnd, uint Msg, long wParam, long lParam);

 

private const int SWP_NOOWNERZORDER = 0x200;
private const int SWP_NOREDRAW = 0x8;
private const int SWP_NOZORDER = 0x4;
private const int SWP_SHOWWINDOW = 0x0040;
private const int WS_EX_MDICHILD = 0x40;
private const int SWP_FRAMECHANGED = 0x20;
private const int SWP_NOACTIVATE = 0x10;
private const int SWP_ASYNCWINDOWPOS = 0x4000;
private const int SWP_NOMOVE = 0x2;
private const int SWP_NOSIZE = 0x1;
private const int GWL_STYLE = (-16);
private const int WS_VISIBLE = 0x10000000;
private const int WM_CLOSE = 0x10;
private const int WS_CHILD = 0x40000000;

public string ExeName
        {

get
            {
return exeName;
            }

set
            {
                exeName= value;
            }
        }


public Form2()
        {
            InitializeComponent();
        }

private void button1_Click(object sender, EventArgs e)
        {
this.exeName = @"D:/Program Files/Microsoft Office/OFFICE11/WINWORD.exe";

try
            {

// Start the process                process = System.Diagnostics.Process.Start(this.exeName);

// Wait for process to be created and enter idle condition                process.WaitForInputIdle();

// Get the main handle                appWin = process.MainWindowHandle;

            }

catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error");
            }

// Put it into this form            SetParent(appWin, this.Handle);

// Remove border and whatnot
// SetWindowLong(appWin, GWL_STYLE, WS_VISIBLE);
// Move the window to overlay it on this window            MoveWindow(appWin, 0, 0, this.Width, this.Height, true);
        }

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
try
            {
                process.Kill();
            }
catch { }
        }

private void Form2_Resize(object sender, EventArgs e)
        {
if (this.appWin != IntPtr.Zero)
            {
                MoveWindow(appWin,0, 0, this.Width, this.Height, true);
            }

//base.OnResize(e);        }
    }
}

網(wǎng)站欄目:C#將exe運行程序嵌入到自己的winform窗體中-創(chuàng)新互聯(lián)
本文URL:http://weahome.cn/article/djjegi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部