85 lines
2.2 KiB
Perl
85 lines
2.2 KiB
Perl
package OpShellFolder;
|
|
|
|
$ENV{script_name} = 'OpShellFolder.pl';
|
|
|
|
use Win32API::Registry 0.13 qw( :ALL );
|
|
|
|
my %OpSyntax = (
|
|
remark => [0,"rem"],
|
|
copyfileto => [6,"copy"],
|
|
copyfilefrom => [5,"copy"],
|
|
copyfolderto => [6,"copy"],
|
|
copyfolderfrom => [3,"copy"],
|
|
delfolder => [1,"del /s /q"],
|
|
delfile => [2,"del"],
|
|
renamefolderto => [4,"ren"],
|
|
renamefolderfrom => [3,"ren"],
|
|
renamefileto => [6,"ren"],
|
|
renamefilefrom => [5,"ren"],
|
|
movefolderto => [4,"move"],
|
|
movefolderfrom => [3,"move"],
|
|
movefileto => [6,"move"],
|
|
movefilefrom => [5,"move"]
|
|
);
|
|
|
|
my %ShellFolderKeys = map({$_ => 1}
|
|
(qw(AppData Cache Cookies Desktop Favorites
|
|
History Personal Programs Startup Templates),
|
|
"My Pictures", "Start Menu")
|
|
);
|
|
|
|
|
|
sub OpShellFolder {
|
|
|
|
my ($op, $shellfolderkey, $something) = @_;
|
|
|
|
my ($type, $shellfolder, $opcmd, @Syntax, $key, $wkey);
|
|
|
|
$op = lc$op;
|
|
|
|
if (!exists $OpSyntax{$op}) {
|
|
print "Error - $op is not an invalid operation\n";
|
|
return;
|
|
}
|
|
|
|
if (!exists $ShellFolderKeys{$shellfolderkey}) {
|
|
print "Error - $shellfolderkey is not an invalid shell folder key\n";
|
|
return;
|
|
}
|
|
|
|
$something=~/([^\\]+)$/;
|
|
($something_filepath, $something_filename)=($`, $1);
|
|
|
|
|
|
# Retrive the registry keys
|
|
RegOpenKeyEx( HKEY_CURRENT_USER,
|
|
"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders", 0, KEY_READ, $wkey )
|
|
or die "Can't open HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders: $^E\n";
|
|
|
|
RegQueryValueEx( $wkey, $shellfolderkey, [], $type, $shellfolder, [] )
|
|
or die "Can't read HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders: $^E\n";
|
|
|
|
RegCloseKey( $wkey );
|
|
|
|
$opcmd = $OpSyntax{$op}[1];
|
|
|
|
@Syntax = (
|
|
"$opcmd $something", #0
|
|
"$opcmd \"$shellfolder\"", #1
|
|
"$opcmd \"$shellfolder\"\\\"$something\"", #2
|
|
"$opcmd \"$shellfolder\" \"$something\"", #3
|
|
"$opcmd \"$something\" \"$shellfolder\"", #4
|
|
"$opcmd \"$shellfolder\"\\\"$something_filename\" \"$something\"", #5
|
|
"$opcmd \"$something\" \"$shellfolder\"\\\"$something_filename\"", #6
|
|
);
|
|
|
|
system($Syntax[$OpSyntax{$op}[0]]);
|
|
}
|
|
|
|
# Cmd entry point for script.
|
|
if (eval("\$0 =~ /" . __PACKAGE__ . "\\.pl\$/i")) {
|
|
|
|
&OpShellFolder(@ARGV);
|
|
|
|
}
|
|
1; |