How to open text in Notepad from .NET?

前端 未结 4 1981
太阳男子
太阳男子 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

提交回复
热议问题