将剪贴板中的文本保存到文件中

jim*_*web -1 delphi delphi-xe6

我正在尝试下面的代码,应该将剪贴板文本保存到Delphi XE6中的文本文件中.代码运行正常,但在输出文件中只生成垃圾值,即使剪贴板包含复制的文本片段也是如此.如何更改代码才能正常工作?

function SaveClipboardTextDataToFile(
  sFileTo : string ) : boolean;
var
  ps1,
  ps2   : PChar;
  dwLen : DWord;
  tf    : TextFile;
  hData : THandle;
begin
  Result := False;
  with Clipboard do
  begin
    try
      Open;
      if( HasFormat( CF_TEXT ) ) then
      begin
        hData :=
          GetClipboardData( CF_TEXT );

        ps1 := GlobalLock( hData );
        dwLen := GlobalSize( hData );

        ps2 := StrAlloc( 1 + dwLen );

        StrLCopy( ps2, ps1, dwLen );

        GlobalUnlock( hData );

        AssignFile( tf, sFileTo );
        ReWrite( tf );
        Write( tf, ps2 );
        CloseFile( tf );

        StrDispose( ps2 );

        Result := True;
      end;
    finally
      Close;
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

Ser*_*yuz 5

你看垃圾是因为CF_TEXT是ANSI.您请求ANSI文本,操作系统将剪贴板内容转换为ANSI,并将其放在unicode字符串中.使用CF_UNICODETEXTUnicode的应用.

还要考虑对问题的评论中提出的要点.