Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: How to process dropped files

by Anonymous Monk
on May 26, 2024 at 11:06 UTC ( [id://11159667]=note: print w/replies, xml ) Need Help??


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!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11159667]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (5)
As of 2024-09-18 12:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    The PerlMonks site front end has:





    Results (24 votes). Check out past polls.

    Notices?
    erzuuli‥ 🛈The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.