2013-06-02 7 views
1

사전을 개발 중입니다. 이 코드를 사용하여 클립 보드에서 텍스트를 가져옵니다.C#의 클립 보드에서 비 라틴 문자를 올바르게 가져올 수 없습니다.

[DllImport("User32.dll")] 
    protected static extern int SetClipboardViewer(int hWndNewViewer); 
    [DllImport("User32.dll", CharSet = CharSet.Auto)] 
    public static extern bool ChangeClipboardChain(IntPtr hWndRemove, IntPtr hWndNewNext); 
    [DllImport("user32.dll", CharSet = CharSet.Auto)] 
    public static extern int SendMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam); 
    IntPtr nextClipboardViewer; 

    protected override void WndProc(ref System.Windows.Forms.Message m) 
    { 
     // defined in winuser.h 
     const int WM_DRAWCLIPBOARD = 0x308; 
     const int WM_CHANGECBCHAIN = 0x030D; 

     switch (m.Msg) 
     { 
      case WM_DRAWCLIPBOARD: 
       DisplayClipboardData(); 
       SendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam); 
       break; 
      case WM_CHANGECBCHAIN: 
       if (m.WParam == nextClipboardViewer) 
        nextClipboardViewer = m.LParam; 
       else 
        SendMessage(nextClipboardViewer, m.Msg, m.WParam, m.LParam); 
       break; 
      default: 
       base.WndProc(ref m); 
       break; 
     } 
    } 
    internal void DisplayClipboardData() 
    { 
      bool isDataText = false; 
      IDataObject iData = new DataObject(); 
      iData = Clipboard.GetDataObject(); 
      if (iData.GetDataPresent(DataFormats.Text)) 
      { 
       textBox1.Text = (string)iData.GetData(DataFormats.Text); 
      } 
    } 

먼저 키보드 언어를 EN (영어) 또는 BG (불가리아어)로 설정할 수 있습니다. 키보드 언어를 EN으로 설정하고 비 라틴 문자를 복사하려고하면 문제가 발생합니다. 대신 정확한 단어. BG로 설정하면 정확한 단어를 얻습니다. UTF-8과 ANSII로 인코딩 된 문서에서 비 라틴 텍스트를 복사하려고 시도했지만, 차이는 없습니다. (물음표)

답변

2

(string)iData.GetData(DataFormats.Text); 대신 Clipboard.GetText();을 사용해보십시오. 올바른 형식 (텍스트 또는 유니 코드 텍스트)의 텍스트를 가져와야합니다.

+0

'textBox1.Text = Clipboard.GetText (TextDataFormat.UnicodeText); '그리고 작동 중입니다. – vinsa

+1

OS에 따라 텍스트를 UnicodeText 또는 Text 형식으로 가져와야합니다. 'Clipboard.GetText();'는 올바른 형식을 선택할 것이므로이 방법을 사용해야합니다. –