我想打开Notepad ++,并让它以编程方式从我的应用程序中显示一些未保存的文本。我的第一种方法是保存一个文本文件,然后让notepad ++打开它。
Process.Start("notepad++.exe", filename);
但是我不想用随机文件向文件系统发送垃圾邮件。当用户编辑并保存打开的文本文件时,我不想尝试删除应用程序创建的未编辑文件。我认为“打开notepad ++,在其中放入文本,然后完成操作”将是最干净的方法。仅供参考:文字不应该回来。这是单向交易。
我可以打开notepad ++并向系统发送一些击键(例如,文本到剪贴板,notepad ++中的Ctrl + V)。但这是不干净的,依赖于处理良好的窗口聚焦。有没有其他方法可以使notepad ++显示没有文件或文件名的文本?
我试图在记事本++ comand line options中找到东西。 ghost typing根本不适合我。
编辑:我不想在我的应用程序中进行任何文本编辑。因此,这只是将文本发送到记事本++。
答案 0 :(得分:0)
免责声明:,该方法有效,但是我不知道该解决方案的效果如何,使用后果自负
我无法使用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()
使用剪贴板中存储的文本)
答案 1 :(得分:-2)
编辑:答案已过时;我的答案是一个选择,直到OP更改了他不想保存文件/ EDIT的问题
几天前,我遇到了类似的“问题”,如果不保存文件就无法解决。
所以基本上,我只是创建了一个文件
File.WriteAllText(DIRECTORYPATH + FILENAME, TextToShow);
然后我打开了流程
Process.Start(NOTEPAD++PATH, FILEPATH);
然后我打电话
Thread.Sleep(500);
由于文件较大,我遇到了记事本打开但告诉我文件不可用(500为0.5秒)的问题
最后我打电话给
File.Delete(FILEPATH);
这样,您可以打开记事本,将输入内容放入其中,然后在记事本保持内容打开的状态下删除文件
注意:这是我自己解决问题的方法,也许有更好的方法,但是有了这个,您就不需要第三方库了