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编码的文件复制非拉丁文本,这是相同的,没有区别,我只得到?????? (问号)
我绑定了'textBox1.Text = Clipboard.GetText(TextDataFormat.UnicodeText);'并且它正在工作 – vinsa
根据操作系统的不同,您必须以UnicodeText或Text格式获取文本。 'Clipboard.GetText();'会为你选择正确的格式,所以你应该使用这个方法。 –