I can get those same numbers from the underlying Win32 API using a couple of easy Perl modules. It's amazing what you can do in Perl without resorting to external executables calling external interpreters when you are willing to use a module or two.
# Recreate the JS in actual Perl with Win32-based modules, because the +re's no reason to spawn a javascript interpreter to run a ScriptingOb +ject library to do the underlying win32 api calls that they wrap use warnings; use strict; use Win32API::File (); # comes pre-installed with Strawberry +Perl use Win32::DriveInfo (); # installed using `cpanm Win32::DriveI +nfo` sub GetDriveInfoPL { my $drives = defined $_[0] ? $_[0] : join('', 'A'..'Z'); local $\ = "\n"; my $retval = "\nPerl Gets:\n"; for ( split //, $drives ) { my $drive = $_ . ':'; # GetDriveType is one of many ways to determine whether it's a +n active drive or not, with the benefit that it can distinguish betwe +en types of drives my $type = Win32API::File::GetDriveType($drive); next unless $type > Win32API::File::DRIVE_NO_ROOT_DIR; my $typestr = (qw/DRIVE_UNKNOWN DRIVE_NO_ROOT_DIR DRIVE_REMOVA +BLE DRIVE_FIXED DRIVE_REMOTE DRIVE_CDROM DRIVE_RAMDISK/)[$type]; #print "GetDriveType($drive) = $type => $typestr"; my $fsotype = $type - 1; # the FSO .DriveType is off-by-one fr +om the Win32API::File::GetDriveType() call: <https://learn.microsoft. +com/en-us/office/vba/language/reference/user-interface-help/drivetype +-property> # GetVolumeInformation grabs most of the attributes available +from the FSO Drive object properties warn "GetVolumeInformation($drive) failed: $^E\n" unless Win32 +API::File::GetVolumeInformation("${drive}/", my $osVolName, 99, my $o +uSerialNum, my $ouMaxNameLen, my $ouFsFlags, my $osFsType, 99 ); my $hexSerialNum = sprintf '%X', $ouSerialNum; #print "GetVolumeInformation(${drive}/) => $osVolName, $ouSeri +alNum = 0x$hexSerialNum, $ouMaxNameLen, $ouFsFlgs, $osFsType"; #... except size info, which can be gotten through Win32::Driv +eInfo my @space = Win32::DriveInfo::DriveSpace($drive); #print "DriveSpace($drive) = ", join ', ', @space; $retval .= "$drive*$fsotype*$hexSerialNum*$osFsType*$osVolName +*$space[5]*$space[6]\n"; } print $retval; } # GetDriveInfoJS(); # this is the GetDriveInfo sub from [harangsolt33] +'s answer (so not repeated here) GetDriveInfoPL();
and the results:
(volume labels obfuscated)JS Gets: C:*2*BE093728*NTFS*OS*1001296752640*719091134464 J:*3*BBA13F0F*NTFS*MyNAS*2984210202624*2221555318784 T:*3*448F8317*exFAT*OffBrand Cloud Drive*54760833024*54619620864 Perl Gets: C:*2*BE093728*NTFS*OS*1001296752640*719091134464 J:*3*BBA13F0F*NTFS*MyNAS*2984210202624*2221555318784 T:*3*448F8317*exFAT*OffBrand Cloud Drive*54760833024*54619620864
In reply to Re^2: Almost cool: removable drive "finder" instead of windows autoplay
by pryrt
in thread Almost cool: removable drive "finder" instead of windows autoplay
by Intrepid
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |