windows-nt/Source/XPSP1/NT/tools/postbuildscripts/opshellfolder.pl
2020-09-26 16:20:57 +08:00

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;