Estoy usando VB.NET y Visual Studio 2008.

Mi pregunta es: ¿Cómo puedo abrir el Bloc de notas desde una aplicación de Windows Forms y, a continuación, coloque algunos cadena de texto en la ventana del Bloc de notas?

  • El bloc de notas es simplemente un TextBox de control con una barra de menú. Sería mucho más fácil y más productivo para agregar un TextBox control a su forma (o una segunda forma), y mostrar el texto. La apertura de otro proceso, la búsqueda de su identificador de ventana, envío de mensajes, y todas las otras cosas que sería requerido por una verdadera solución a su problema no son realmente la mejor manera de ir sobre esto, y ciertamente no es sencillo. Si usted está empezando a cabo en WinForms desarrollo, definitivamente no es necesario parar y aprender todo acerca de la API de Windows.
  • Gris: estoy tratando de crear una plantilla de carta, por lo que el nuevo BLOC de notas contendrá la carta guardada en la cabeza, etc para que el usuario agregue su propia carta contenido, a continuación, guardar, imprimir, etc
  • Ah, para, a continuación, las respuestas a continuación tenemos todo cubierto. Crear un archivo de texto y, a continuación, utilizar el Shell de Windows para abrir el Bloc de notas de mostrar en el archivo de texto. Process.Start es su punto de partida una vez que haya creado el documento de texto en el disco.
  • Gris: OK, yo sabía a lo que te refieres, gracias por la pista.
  • Usted puede utilizar un Bloc de notas clon que le da mucho más control de código fuente así que usted puede incorporar a la derecha en su aplicación. Usted puede encontrar aquí: simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html (Similar a lo que @CodyGray está describiendo, excepto que se comporta exactamente igual que el bloc de notas)
InformationsquelleAutor Sean | 2011-04-18

3 Comentarios

  1. 8
    1. Uso Process.Start con la propiedad ShellExecute conjunto para true;
    2. Utilizar el portapapeles: http://www.dreamincode.net/forums/topic/40011-how-do-i-put-text-in-another-program/

    Actualización

    Process.Start devuelve un Process objeto que tiene una MainWindowHandle de la propiedad. El uso que manejar cuando el envío de texto en lugar de la FindWindow en el enlace mencionado arriba.

    Actualización 2

    Código

    Const WM_SETTEXT As Integer = &HC
    <DllImport("user32.dll")> _
    Private Shared Function SendMessage(hWnd As IntPtr, Msg As Integer, wParam As IntPtr, <MarshalAs(UnmanagedType.LPStr)> lParam As String) As IntPtr
    End Function
    
    Private Shared Sub Main()
        'ProcessStartInfo is used to instruct the Process class
        ' on how to start a new process. The UseShellExecute tells
        ' the process class that it (amongst other) should search for the application
        ' using the PATH environment variable.
        Dim pis As ProcessStartInfo = New ProcessStartInfo("notepad.exe")
        pis.UseShellExecute = True
    
        ' The process class is used to start the process
        ' it returns an object which can be used to control the started process
        Dim notepad As Process = Process.Start(pis)
    
        ' SendMessage is used to send the clipboard message to notepad's
        ' main window.
        Dim textToAdd As String = "Text to add"
        SendMessage(notepad.MainWindowHandle, WM_SETTEXT, IntPtr.Zero, textToAdd)
    End Sub
    • Sí a la primera parte, no a la segunda parte. FindWindow es explícitamente lo que debe no usar aquí. Demasiado frágil, e innecesariamente complicado para alguien nuevo en WinForms programación. Todo lo que sé hacer es copiar y pegar ese código; que van a ser impotente, cuando no funciona. Y eso no es inesperado. (Esta es también la razón por la he editado la parte de que él era un novato en WinForms de nuevo en la pregunta; creo que debe ser respondido, al menos, con eso en mente.)
    • +1, gracias por el excelente vínculo
    • Gris: yo no añadir el enlace de la FindWindow parte, sino por la SendMessage parte. Pero tienes razón. Yo debería haber sido más claro. Por lo tanto la actualización de mi respuesta.
    • agrega un poco de código. Utiliza un C# a vb.net convertidor (la esperanza de que el código es correcto)
    • ja, ja, su actualización #2 me hace desconcertado, particularmente el ‘Dim pis = New ProcessStartInfo’ línea. De todos modos gracias por los esfuerzos.
    • Mucho mejor respuesta. Me fijo el VB.NET código para ser más idiomática.
    • Gris: gracias por tu ayuda. jgauffin del código tal vez demasiado avanzado para mí.
    • Bueno, estoy muy impresionado de que usted está tratando de entiendo el código que estás usando, en lugar de simplemente copiar y pegar directamente de alguien responda. Eso significa mucho allí.
    • Gris: gracias por las palabras bonitas, adiós por ahora !

  2. 10

    El enfoque más sencillo es escribir un archivo de texto, a continuación, abra que, en lugar de al revés.

    Puede utilizar Sistema.Archivo.IO.WriteAllText, y el Sistema.Los diagnósticos.Proceso de clase.

    Un código rápido de la muestra que sería a lo largo de estas líneas:

    File.WriteAllText (
        @"C:\temp\myFile.txt", 
        "This is my letter header\nIt has a new-line in it")
    Process.Start("notepad.exe", @"C:\temp\myFile.txt");
    • +1, gracias por otro camino para resolver mi problema
    • Eso es lo que me sugieren demasiado. Recuerde, usted siempre puede utilizar Path.GetTempFileName() para obtener un nombre temporal. No importa que no devuelve un .txt archivo (aunque se puede forzar): Bloc de notas le de abrirlo.
  3. 5

    El truco aquí es hacer un archivo de texto, y de pasar el Bloc de notas como un argumento de línea de comandos, o, si el Bloc de notas es la aplicación predeterminada para «.txt», usted puede pagar directamente el nombre del archivo.

    Crear/editar archivo de texto a través de VB.NET

    Lanzamiento y ver a un proceso de VB.NET 2010

    Puede utilizar los argumentos de la colección de ProcessStartInfo para pasar el nombre del archivo si es necesario.

    • más de la descripción por favor
    • +1, gracias por la ayuda

Dejar respuesta

Please enter your comment!
Please enter your name here