in reply to How to process dropped files

What if I drag multiple files to the perl window? Only one filename is received

What if you drop them onto just a cmd.exe (or PowerShell) window? The same happens, so it's not Perl limitation. Then either a proper GUI, or e.g. drop-target helper shortcut on Desktop which whole purpose would be to IPC received list to the main app, are required.

I think quick/dirty/easy way could be to both receive either single dropped filename or a bunch/list from clipboard (i.e. user selects files, then just hits ctrl-C instead of dragging/missing/messing).

Of course there are rough edges for you to solve. I have no idea if 50 ms timeout is good enough to prevent too many empty cycles, or why filenames being got from these 2 sources are encoded differently if not ASCII and/or quoted or not. But these "problems" should be trivial.

use strict; use warnings; use feature 'say'; use Term::ReadKey; ReadMode 3; END { ReadMode 0 }; use Win32::Clipboard; Win32::Clipboard::Empty(); END { Win32::Clipboard::Empty() }; my @list; while ( 1 ) { if ( defined( my $char = ReadKey( .050 ))) { push @list, '' unless @list; $list[0] .= $char } elsif ( Win32::Clipboard::IsFiles() ) { push @list, Win32::Clipboard::GetFiles(); Win32::Clipboard::Empty() } elsif ( @list ) { say for @list; @list = () } }

Replies are listed 'Best First'.
Re^2: How to process dropped files
by vitoco (Hermit) on May 28, 2024 at 13:18 UTC

    UPDATE!

    Instead of using the registry association of my script, I wrote a .BAT file that receives the dropped files in its icon and then it calls my perl script with all the received parameters (files):

    unifier.pl %*

    But I found something interesting: the working directory for the scripts was the source dir of the dragged files!!! I was expecting it to be the same dir where both the .bat and .pl files were located.

    I didn't hardcoded the paths in both script files. What I did was to create a shortcut to the .bat file. This allowed me to do two things: (1) Set the path of the working directory in its properties, and (2) change the icon to something that could be identified... I chose the pointing down arrow usually used for "download".

      good! i would test with filenames with spaces too

Re^2: How to process dropped files
by vitoco (Hermit) on May 27, 2024 at 03:49 UTC
    I think quick/dirty/easy way could be to both receive either single dropped filename or a bunch/list from clipboard (i.e. user selects files, then just hits ctrl-C instead of dragging/missing/messing).

    That sounds interesting, but in this case the source is Irfanview's Thumbnail window, and it allows dragging selected images to other apps or to the Explorer, but it does not have the option to copy into the clipboard (it has its own copy menu).

    As my need is for a single time project, I think I'll take the drop into the script icon option. BTW, what I need is to visually select some images from hundreds of folders where the images are named by the same numbering sequence, and give a new name to the selected ones when copying them into the destination folder to avoid overwrites, like adding a prefix with the name of the folder from where it was taken.

    Thanks anyway!