How to open text in Notepad from .NET?

前端 未结 4 1775
太阳男子
太阳男子 2020-12-08 20:38

When I click a button on a Windows Forms form, I would like to open a Notepad window containing the text from a TextBox control on the form.

How can I do that?

相关标签:
4条回答
  • 2020-12-08 20:59

    You don't need to create file with this string. You can use P/Invoke to solve your problem.

    Usage of NotepadHelper class:

    NotepadHelper.ShowMessage("My message...", "My Title");
    

    NotepadHelper class code:

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

    References (pinvoke.net and msdn.microsoft.com):

    SetWindowText: pinvoke | msdn

    FindWindowEx: pinvoke | msdn

    SendMessage: pinvoke | msdn

    0 讨论(0)
  • 2020-12-08 21:07

    For non ASCII user.

    [DllImport("User32.dll", EntryPoint = "SendMessage", CharSet = CharSet.Unicode)]
    private static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam);
    

    Based on @Peter Mortensen answer

    Add CharSet = CharSet.Unicode to the attribute for supporting Unicode characters

    0 讨论(0)
  • 2020-12-08 21:08

    Try this out:

    System.IO.File.WriteAllText(@"C:\test.txt", textBox.Text);
    System.Diagnostics.Process.Start(@"C:\test.txt");
    
    0 讨论(0)
  • 2020-12-08 21:14

    Save the file to disk using File.WriteAllText:

    File.WriteAllText("path to text file", myTextBox.Text);
    

    Then use Process.Start to open it in notepad:

    Process.Start("path to notepad.exe", "path to text file");
    
    0 讨论(0)
提交回复
热议问题