in reply to Re^2: print to clipboard
in thread print to clipboard

I appreciate the point but the code above runs as expected vis CRLF. The thing with Win32 clipboard is that it kinda makes conversions unnecessary. You just don't paste from Win32 to Gnome. And if you remain on Win32 then the line endings simply remain as they should be.

cheers

tachyon

Replies are listed 'Best First'.
Re^4: print to clipboard
by tilly (Archbishop) on Aug 24, 2004 at 16:16 UTC
    I'm sure that the above program worked in your test. But try the following experiment:

    Open up Notepad, write something, and copy it to the clipboard. Read the clipboard with Win32::Clipboard. Look for whether you now see \r inside Perl.

    Save the file from Notepad to the filesystem. In Perl, read that file, and copy it to the clipboard. Paste the clipboard into Notepad, and see how it deals with the straight \n's that you see.

    When I tried this a long time ago (I no longer deal with Windows, so it might have changed), the results were that other programs put \r\n into the clipboard and expected to find \r\n when they copied from it. Therefore you need to handle the conversion with the Win32 clipboard if you want to be able to get smooth interactions between Perl and other Windows programs.

      I don't do much Win32 these days either. As you say you need to deliver the expected. Here is an amusing snippet, relevant to the current:

      sub word_find_and_replace { my ( $word, $rel_file_path, $tokens_ref ) = @_; # first make a temporary file to do the search and replace on my ( $fh, $temp_name ) = get_tempfile( "$DOC_DIR/system", 'doc' ); close $fh; my $content_ref = read_file( "$DOC_DIR/$rel_file_path" ); create_file( "$DOC_DIR/system/$temp_name", $content_ref, 'overwrit +e ok' ); $word->{visible} = 0; my $doc = $word->{Documents}->Open("$DOC_DIR/system/$temp_name"); my $search_obj = $doc->Content->Find; my $replace_obj = $search_obj->Replacement; for my $token ( keys %$tokens_ref ) { my $find = '<?' . $token . '?>'; my $replace = $tokens_ref->{$token}; # now i know this looks weired but M$ word (at least 2000) wan +ts \r # as the para marker not \r\n or even \n if you send \n you ge +t little # binary squares..... oh well that's M$ for you. $replace =~ s/\r\n|\n/\r/g; # this makes it work properly. GO +K $search_obj->{Text} = $find; $replace_obj->{Text} = $replace; $search_obj->Execute({Replace => $wdReplaceAll}); } $doc->Save; $doc->Close; # now get the data out of the modified temp file $content_ref = read_file( "$DOC_DIR/system/$temp_name" ); # remove our unwanted temp files and objects unlink "$DOC_DIR/system/$temp_name"; undef $search_obj; undef $replace_obj; undef $doc; return $content_ref; }

      cheers

      tachyon