我正在为一个大型项目编写测试应用程序,但似乎无法从Windows剪贴板中检索Unicode CSV数据。我成功地检索了CF_UNICODETEXT,使用内置的GetClipboardData API调用,但是当我在MSExcel中将Unicode CSV放入剪贴板并尝试以CSV格式检索时,我得到了错误的数据。以下是一些代码:
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格式不行。
RegisterClipboardFormat('CSV')
替换CF_UNICODETEXT
,它就会失败”。 - Zoë Peterson