如何从.net中打开记事本中的文本
本文关键字:记事本 文本 net | 更新日期: 2023-09-27 18:10:13
当我单击Windows窗体上的按钮时,我想打开一个记事本窗口,其中包含窗体上的文本框控件的文本。
我该怎么做呢?
您不需要使用此字符串创建文件。你可以使用P/Invoke来解决你的问题。
NotepadHelper类的使用:
NotepadHelper.ShowMessage("My message...", "My Title");
NotepadHelper
类代码:
using System;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace Notepad
{
public static class NotepadHelper
{
[DllImport("user32.dll", EntryPoint = "SetWindowText")]
private static extern int SetWindowText(IntPtr hWnd, string text);
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
public static void ShowMessage(string message = null, string title = null)
{
Process notepad = Process.Start(new ProcessStartInfo("notepad.exe"));
if (notepad != null)
{
notepad.WaitForInputIdle();
if (!string.IsNullOrEmpty(title))
SetWindowText(notepad.MainWindowHandle, title);
if (!string.IsNullOrEmpty(message))
{
IntPtr child = FindWindowEx(notepad.MainWindowHandle, new IntPtr(0), "Edit", null);
SendMessage(child, 0x000C, 0, message);
}
}
}
}
}
参考文献(pinvoke.net和msdn.microsoft.com):
SetWindowText: pinvoke | msdn
findwindowwex: pinvoke | msdn
SendMessage: pinvoke | msdn
试一下:
System.IO.File.WriteAllText(@"C:'test.txt", textBox.Text);
System.Diagnostics.Process.Start(@"C:'test.txt");
使用File.WriteAllText
将文件保存到磁盘:
File.WriteAllText("path to text file", myTextBox.Text);
然后使用Process.Start
在记事本中打开:
Process.Start("path to notepad.exe", "path to text file");
非ASCII用户
[DllImport("User32.dll", EntryPoint = "SendMessage", CharSet = CharSet.Unicode)]
private static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
基于@Peter Mortensen答案
添加CharSet = CharSet。Unicode到支持Unicode字符的属性
我一直在使用NotepadHelper解决方案,直到我发现它在Windows 11上不起作用。将文件写入磁盘并使用默认文本编辑器启动似乎是最好的解决方案。这已经张贴,但我发现你需要传递UseShellExecute=true。
System.IO.File.WriteAllText(path, value);
System.Diagnostics.ProcessStartInfo psi = new() { FileName = path, UseShellExecute = true };
System.Diagnostics.Process.Start(psi);
我写入System.IO.Path.GetTempPath()文件夹,并在应用程序退出时运行清理-搜索我的应用程序使用的文件名的唯一前缀模式。如下所示:
string pattern = TempFilePrefix + "*.txt";
foreach (string f in Directory.EnumerateFiles(Path.GetTempPath(), pattern))
{
File.Delete(f);
}