【问题标题】:How to embed notepad++ in a Windows Form application and how to control it?如何在 Windows 窗体应用程序中嵌入 notepad++ 以及如何控制它?
【发布时间】:2014-10-08 05:42:16
【问题描述】:

我的代码:

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

    private const int WM_SYSCOMMAND = 274; private const int SC_MAXIMIZE = 61488;

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

    public static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
    public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

    private void button1_Click(object sender, EventArgs e)
    {
        Process proc;
        proc = Process.Start("Notepad++.exe");
        proc.WaitForInputIdle();          
        SetParent(proc.MainWindowHandle,panel1.Handle);
        //SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
    }
}

当我执行notepad.exe 而不是notepad++.exe 时,它工作正常。普通记事本位于Windows Form 的面板内。但是当我使用notepad++.exe 时,它在面板内部看不到,而是在外部作为不同的窗口打开。我不想要这个。我的偏好是将notepad++嵌入到我的Windows Form的面板中,我想通过它来控制notepad++

【问题讨论】:

  • 我试过你的代码,它工作正常。 Notepad++ 的主窗口浮动在面板上,而不是单独的窗口。我使用的是最新版本的 Notepad++。
  • 致Mad Sorcerer:::您现在使用哪个版本的notepad++?
  • 您真的需要notepad++,还是只需要code editor

标签: c# .net winforms notepad++


【解决方案1】:

在 setParent 之后添加 Sleep 它将起作用。

SetParent(proc.MainWindowHandle,panel1.Handle); 线程.Sleep(500)

【讨论】:

    猜你喜欢
    • 2014-01-15
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多