2017-02-22 2 views
2

Wenn ich versuche, Text von meiner RichTextBox zu Notepad ++ zu senden, sendet es nur den ersten Buchstaben des Textes. Also wenn ich in meinem Textfeld Send this to Notepad++ in Notepad ++ alles hätte, was angezeigt würde, ist S.SendMessage zu Notepad ++ in C#

Hier ist mein Code

[DllImport("user32.dll", EntryPoint = "FindWindowEx")] 
    public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); 
    [DllImport("User32.dll")] 
    public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, string lParam); 
    private void button2_Click(object sender, EventArgs e) 
    { 

     Process[] notepads = Process.GetProcessesByName("notepad++"); 
     if (notepads.Length == 0) return; 
     if (notepads[0] != null) 
     { 
      IntPtr child = FindWindowEx(notepads[0].MainWindowHandle, new IntPtr(0), "Scintilla", null); 
      SendMessage(child, 0x000C, 0, RichTextBox1.Text); 
     } 
    } 
+0

CharSet = CharSet.Unicode. Standardratschlag: Verwenden Sie die Benutzeroberflächenautomatisierung, um zu vermeiden, dass diese Details falsch angezeigt werden. System.Windows.Automation-Namespace. –

Antwort

4

Sie sind in einen String-Codierung Problem ausgeführt wird. Strings in .NET sind UTF-16-Little-Endian-Strings. Die Zeichenfolge "Send" in UTF-16 ist eigentlich die Bytes S{0}e{0}n{0}d{0}{0}{0}. Ihre Deklaration verwendet die ANSI-Zeichenfolge-Methode. Es gibt eine Reihe von Möglichkeiten, dies zu lösen. Hier ist einer: Verwenden Sie explizit das UTF-16-Formular, indem Sie zu SendMessageW ändern.

[DllImport("User32.dll")] 
public static extern int SendMessageW(IntPtr hWnd, int uMsg, int wParam, string lParam); 
+0

Probieren Sie es aus, funktioniert wie ein Zauber! – Ehouarn

+0

Großartig. Es gibt auch eine Reihe anderer Optionen, die einige Attribute von 'DllImport' und das Attribut 'MarshalAs' (auf dem Parameter) benutzen. Aber das ist das prägnanteste. Vergessen Sie nicht, meine Antwort als akzeptiert zu markieren. :) –

+0

Ich möchte Ihre Antwort als akzeptiert markieren, aber leider bin ich nicht derjenige, der die Frage gestellt: p – Ehouarn