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

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.

Replies are listed 'Best First'.
Re^5: print to clipboard
by tachyon (Chancellor) on Aug 24, 2004 at 16:26 UTC

    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