2016-07-06 13 views
2

Ich verwende PostMessage, um Eingaben an ein Flash-Objekt in einer anderen Anwendung zu senden. Es funktioniert gut, bis ich versuche, ein Unicode-Zeichen zu senden. In diesem Beispiel:Verwenden von PostMessage zum Senden von Unicode-Zeichen

Michaels Buch

Der Apostroph ist nicht wirklich so, es ist nicht ein ASCII 39, sondern ein Unicode U + 2019. Mit der Zeit wird es zu einem Zeitpunkt über 1 Zeichen gesendet wird, wird es als Unicode-Wert und landet als Ausgangs Zeichen verloren die Unicode

Michaela € ™ s Buch

bilden

Wenn ich kopieren und in das Fenster es bewegt sich gut, und wenn ich eine Textdatei in dieses Fenster lädt, lädt es gut. Das Empfangsfenster kann also Unicode empfangen, aber die Art, wie ich es sende, muss nicht korrekt sein. Jede Hilfe würde sehr geschätzt werden.

private void SendKeysToForm(string Message) 
    { 
     for (int i = 0; i < Message.Length; i++) 
     { 
      PostMessage(hwnd, WM_CHAR, (IntPtr)Message[i], IntPtr.Zero); 
     } 
    } 
+1

Vielleicht WM_UNICHAR wird besser funktionieren. Hängt davon ab, Adobe-Software ist, ähm, besonders. –

+0

Warum senden Sie das Zeichen als IntPtr anstelle von Int? –

+0

@HansPassant [WM_CHAR] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms646276 (v = vs.85) .aspx) verwendet UTF-16-Bit, 'WM_UNICHAR' ist für UTF-32 –

Antwort

3

Per der MSDN documentation, Unicode zu senden, müssen Sie PostMessageW verwenden.

Es ist die gleiche Methodensignatur, importieren Sie einfach den Namen PostMessageW und führen Sie das aus.

UPDATE

Wie Hans sehr gut gesagt, wäre ein noch besserer Ansatz sein, die CharSet des DllImport einzustellen:

[DllImport("user32.dll", CharSet=CharSet.Unicode, SetLastError=true)] 
private static extern bool PostMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); 

Dies ist der Rahmen letztlich dazu führen sollte PostMessageW zu importieren.

Vielen Dank Hans!

+2

Könnte es sein, am besten, die CharSet-Eigenschaft richtig zu empfehlen. –

+0

@HansPassant, wenn es eine Möglichkeit gibt, das zu tun, absolut! Ich sehe einfach nichts in der Dokumentation, um zu überprüfen, wie man das im 'wParam' einstellt. Habe ich es vermisst? –

+1

Die CharSet-Eigenschaft des Attributs [DllImport]. Der Standardwert ist in 99,99% der Fälle falsch, in denen Sie eine WinAPI-Funktion aktivieren würden. –

Verwandte Themen