C# 打开记事本++;并将文本粘贴到其中?

C# 打开记事本++;并将文本粘贴到其中?,c#,notepad++,C#,Notepad++,我想打开记事本+,让它以编程方式显示我的应用程序中一些未保存的文本。我的第一个方法是保存一个文本文件,然后让notepad++打开它 Process.Start("notepad++.exe", filename); 但我不想在文件系统中随意发送文件。当用户编辑并保存打开的文本文件时,我不想尝试删除我的应用程序创建的未编辑文件。我认为“打开记事本++,把文本扔进去,然后用它完成”将是最干净的方法。仅供参考:文本不应该返回。这是单向交易 我可以打开记事本++并向系统发送一些按键(例如,剪贴板上的

我想打开记事本+,让它以编程方式显示我的应用程序中一些未保存的文本。我的第一个方法是保存一个文本文件,然后让notepad++打开它

Process.Start("notepad++.exe", filename);
但我不想在文件系统中随意发送文件。当用户编辑并保存打开的文本文件时,我不想尝试删除我的应用程序创建的未编辑文件。我认为“打开记事本++,把文本扔进去,然后用它完成”将是最干净的方法。仅供参考:文本不应该返回。这是单向交易

我可以打开记事本++并向系统发送一些按键(例如,剪贴板上的文本,记事本++中的Ctrl+V)。但这是不干净的,依赖于处理良好的窗口聚焦。有没有其他方法可以让notepad++显示没有文件或文件名的文本

我试图在记事本++中找到一些东西。对我来说根本不起作用


编辑:我不想在我的应用程序中进行任何文本编辑。因此,它只是将文本发送到记事本++。

编辑:回答过时;我的答案是一个选项,直到OP改变了他不想保存/编辑文件的问题

几天前我遇到了一个类似的“问题”,如果不保存文件,我就无法解决它

基本上,我只是创建了一个文件

File.WriteAllText(DIRECTORYPATH + FILENAME, TextToShow);
然后我打开了流程

Process.Start(NOTEPAD++PATH, FILEPATH);
然后我打电话

Thread.Sleep(500);
因为对于较大的文件,我有一个问题,记事本打开了,但告诉我文件不可用(500是0.5秒)

最后我打了电话

File.Delete(FILEPATH);
使用此功能,您可以打开记事本,将输入放入其中,并在记事本与内容保持打开状态时删除文件


注意:这是我自己解决问题的方法,可能有更好的方法,但有了它,您不需要第三方库。例如,免责声明:这是可行的,但我不知道它有多好,使用风险自负

我无法使用记事本+,但可以使用标准的Windows记事本(我认为这样更好,因为你不能假设已安装记事本+),下面是我的代码:

    [DllImport("user32.dll", EntryPoint = "FindWindowEx")]
    public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
    [DllImport("User32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);

    [STAThread]
    static void Main(string[] args)
    {
        Process notepad = Process.Start("notepad");
        Thread.Sleep(50);

        if (notepad != null)
            SendMessage(FindWindowEx(notepad.MainWindowHandle, new IntPtr(0), "Edit", null), 0x000C, 0, "Hello World");
    }

说明:我正在使用
进程启动一个新记事本。启动(“记事本”)
然后使用我导入的两种方法向该进程发送一条消息以写入文本。您可以将最后一行中的“Hello World”替换为您想要的任何字符串(例如
Clipboard.GetText()
以使用剪贴板中存储的文本)

为什么我会被否决?至少告诉我我的回答有什么问题我一直在想。这也将在记事本++中生成一个关于将文件保存在编辑器中的对话框。很抱歉,我一直在使用记事本2,它没有这个对话框。是的,很抱歉出现了否决票。我给了你+1来补偿。你的方法是一种有效的方法。Stackoverflow与以前不同。我问了一个问题,它开始被否决。代表对我来说没那么重要,我只是想知道为什么我被否决了,以提高自己的未来答案:)相关:-请注意,您正在从C#发送UTF-16字符串,因此您必须使用
SendMessageW
有很多应用程序可以做与您相同的事情,如FTP/SSH文件探索器和许多压缩器。当您选择使用外部编辑器编辑某个文件时,他们会做一些事情,并且当文件保存时,会发回一些通知,以便可以在远程/内部更新该文件archive@phuclv好啊但我不想复制一个文件浏览器或任何东西。应用程序已完成。我只是想改进“向记事本发送文本”这一功能。我在问题中添加了一个供参考的信息。我不是在告诉你你创建了一个探索者之类的东西。我只是举几个例子,你可以看看这些应用程序是如何实现这一功能的。显然,这只是应用程序中的一个简单功能,因为原始应用程序中没有编辑功能。它只是在外部应用程序中打开一些文件,并告诉操作系统在文件关闭/保存时发出通知