我正在为一个较大的项目编写一个测试应用程序,而且似乎无法从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