2016-07-06 122 views
2

我正在使用PostMessage將輸入發送到另一個應用程序中的Flash對象。它工作正常,直到我嘗試發送一個Unicode字符。在這個例子中:使用PostMessage發送Unicode字符

邁克爾的書

撇號是不是真的那麼,它不是一個ASCII 39,而是一個Unicode U + 2019。通過它同時跨越1個字符發送的時間,它失去了作爲一個Unicode值和土地作爲原始字符組成的Unicode

麥克拉€™的書

如果我複製並粘貼到窗口它移動正常,如果我加載到該窗口中的文本文件,它加載正常。所以接收窗口能夠接收unicode,但是我發送它的方式一定是不正確的。任何幫助將不勝感激。

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

也許WM_UNICHAR會更好。取決於,Adobe軟件是呃,特別的。 –

+0

爲什麼你發送字符爲'IntPtr'而不是int? –

+0

@HansPassant [WM_CHAR](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646276(v = vs.85).aspx)使用UTF-16位,「WM_UNICHAR」用於UTF-32 –

回答

3

%的MSDN documentation,發送Unicode,你需要使用PostMessageW

這是相同的方法簽名,只需導入名稱PostMessageW並執行該操作。

UPDATE

漢斯·很好地說,一種更好的方法是設置的CharSetDllImport

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

這應該引起框架,最終匯入PostMessageW

非常感謝Hans!

+2

可能吧,最好推薦正確使用CharSet屬性。 –

+0

@HansPassant,如果有辦法做到這一點,絕對!我只是沒有看到文檔中的任何內容,驗證如何在'wParam'中設置它。我錯過了嗎? –

+1

[DllImport]屬性的CharSet屬性。默認值在99.99%的情況下是錯誤的,在這些情況下您將捏住一個winapi函數。 –

相關問題