【问题标题】:Open Notepad++ and paste text into it?打开记事本++并将文本粘贴到其中?
【发布时间】:2019-02-25 14:46:30
【问题描述】:

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

Process.Start("notepad++.exe", filename);

但我不想用随机文件向文件系统发送垃圾邮件。当用户编辑打开的文本文件并保存它时,我不想去尝试删除我的应用程序创建的未编辑文件。我认为“打开记事本++,将文本放入其中并完成它”将是最干净的方法。仅供参考:文本不应该回来。这是一种单向交易。

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

我试图在记事本++ comand line options 中找到一些东西。而ghost typing 根本不适合我。

编辑:我不想在我的应用程序中进行任何文本编辑。所以它只是向记事本++发送文本。

【问题讨论】:

  • 有很多应用程序与您的应用程序一样,例如 FTP/SSH 文件浏览器和许多压缩器。当您选择使用外部编辑器编辑某些文件时,他们会执行某些操作,并且在保存文件时会发回一些通知,以便可以在远程端/存档内部更新文件
  • @phuclv 好的。但我不想复制文件资源管理器或任何东西。该应用程序已完成。我只想改进“向记事本发送文本”这一功能。我在问题中添加了一个 FYI。
  • 我不是告诉你你创建了一个资源管理器什么的。我只是举个例子,你可以看看这些应用程序是如何实现该功能的。显然这只是应用程序中的一个简单功能,因为原始应用程序中没有编辑。它只是在外部应用程序中打开一些文件,并告诉操作系统在文件关闭/保存时通知

标签: c# notepad++


【解决方案1】:

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

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

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

File.WriteAllText(DIRECTORYPATH + FILENAME, TextToShow);

然后我打开进程

Process.Start(NOTEPAD++PATH, FILEPATH);

然后我打电话

Thread.Sleep(500);

因为文件较大,我遇到了记事本打开但告诉我文件不可用的问题(500 是 0.5 秒)

最后我打了电话

File.Delete(FILEPATH);

这样,您可以打开记事本,将输入内容放入其中,然后在记事本保持内容打开的同时删除文件

注意:这是我自己解决问题的方法,可能有更好的方法,但是这样你就不需要第三方库了

【讨论】:

  • 为什么我的投票被否决了?至少告诉我我的答案有什么问题
  • 我一直在考虑。这还将在 notepad++ 中生成一个关于将文件保存在编辑器中的对话框。
  • 抱歉,我一直在使用没有此对话框的 Notepad2
  • 是的,很抱歉投反对票。我给了你一个+1来补偿。您的方法是一种有效的方法。 Stackoverflow 和以前不一样了。我问一个问题,它开始被否决。
  • 代表对我来说不是那么重要,我只是想知道为什么我被否决以提高自己以获得未来的答案:)
【解决方案2】:

免责声明:这可行,但我不知道它的解决方案有多好,使用风险自负

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

    [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");
    }

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

【讨论】:

猜你喜欢
  • 2023-02-04
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多