-1

クリップボードのテキストを 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;
4

2 に答える 2

5

CF_TEXTANSI であるため、ジャンクと表示されます。ANSI テキストを要求すると、OS はクリップボードの内容を ANSI に変換し、それを Unicode 文字列に入れます。CF_UNICODETEXTUnicode アプリケーションに使用します。

また、質問へのコメントで提起された点も考慮してください。

于 2014-06-22T02:39:52.137 に答える