如何从.NET的记事本中打开文本?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

当我单击Windows窗体窗体上的按钮时,我想打开包含窗体上TextBox控件文本的记事本窗口。

我怎样才能做到这一点?

提问于
用户回答回答于

试试这个:

System.IO.File.WriteAllText(@"C:\test.txt", textBox.Text);
System.Diagnostics.Process.Start(@"C:\test.txt");
用户回答回答于

不需要使用此字符串创建文件。可以使用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

FindWindowEx:pinvoke | MSDN

SendMessage:pinvoke | MSDN

扫码关注云+社区