我正在爲一個較大的項目編寫一個測試應用程序,而且似乎無法從Windows剪貼板中檢索Unicode CSV數據,我成功地在檢索CF_UNICODETEXT時使用內置的GetClipboardData api調用,但是當我將Unicode CSV放在剪貼板上時MSExcel並嘗試以CSV格式進行檢索,我收到了錯誤的數據。這裏是一些代碼;如何檢索Unicode CSV剪貼板數據MS Windows XP?
procedure TForm1.Button7Click(Sender: TObject);
var
hMem : THandle;
dwLen : DWord;
ps1, ps2 : pChar;
begin
OpenClipboard(form1.Handle);
RichEdit1.Lines.Clear;
try
if Clipboard.HasFormat(CF_UNICODETEXT) then
begin
hMem := GetClipboardData(CF_UNICODETEXT);
ps1 := GlobalLock(hMem);
dwLen := GlobalSize(hMem);
ps2 := StrAlloc(1 + dwLen);
StrLCopy(ps2, ps1, dwLen);
GlobalUnlock(hMem);
RichEdit1.Lines.Add(ps2);
end
else
ShowMessage('No CF_UNICODETEXT on Clipboard!');
finally
CloseClipboard;
end;
end;
下面這段代碼應該CSV以及工作,但是當我改變我的剪貼板格式是什麼,我希望,應用程序不會得到正確的數據。知道我可以得到標籤式的Unicode就可以了,可能很重要,只是沒有他想要的CSV。
但是,但是,但是,從剪貼板中獲取數據應該做的CF_TEXT和CF_UNICODETEXT之間的自動轉換。請參閱:http://msdn.microsoft.com/zh-cn/library/ms649013(VS.85).aspx中的合成剪貼板格式。但是可能發生的情況是,CF_UNICODETEXT從剪貼板中取出UTF-8而不是UTF-16LE?雖然看到Windows本身就是UTF-16LE,但會感到奇怪。 – 2010-06-21 18:26:38
@Marjan:CF_UNICODE可以工作,但它是*製表符*分隔的,而不是逗號分隔的。 Excel在包含ANSI編碼CSV的剪貼板中包含第二種格式,這就是wfoster所要求的。他的問題實際上是:「這段代碼工作正常,但如果我用'RegisterClipboardFormat('CSV')''替換'CF_UNICODETEXT',則失敗。 – 2010-06-21 18:45:40
明白了。感謝您的澄清 – 2010-06-21 19:09:07