home *** CD-ROM | disk | FTP | other *** search
- package Win32::Shortcut;
- #######################################################################
- #
- # Win32::Shortcut - Perl Module for Shell Link Interface
- # ^^^^^^^^^^^^^^^
- # This module creates an object oriented interface to the Win32
- # Shell Links (IShellLink interface).
- #
- # Version: 0.03 (07 Apr 1997)
- #
- #######################################################################
-
- require Exporter; # to export the constants to the main:: space
- require DynaLoader; # to dynuhlode the module.
-
- @ISA= qw( Exporter DynaLoader );
- @EXPORT = qw(
- SW_SHOWMAXIMIZED
- SW_SHOWMINNOACTIVE
- SW_SHOWNORMAL
- );
-
-
- #######################################################################
- # This AUTOLOAD is used to 'autoload' constants from the constant()
- # XS function. If a constant is not found then control is passed
- # to the AUTOLOAD in AutoLoader.
- #
-
- sub AUTOLOAD {
- my($constname);
- ($constname = $AUTOLOAD) =~ s/.*:://;
- #reset $! to zero to reset any current errors.
- $!=0;
- my $val = constant($constname, @_ ? $_[0] : 0);
- if ($! != 0) {
-
- # [dada] This results in an ugly Autoloader error
-
- #if ($! =~ /Invalid/) {
- # $AutoLoader::AUTOLOAD = $AUTOLOAD;
- # goto &AutoLoader::AUTOLOAD;
- #} else {
-
- # [dada] ... I prefer this one :)
-
- ($pack, $file, $line) = caller;
- undef $pack; # [dada] and get rid of "used only once" warning...
- die "Win32::Shortcut::$constname is not defined, used at $file line $line.";
-
- #}
- }
- eval "sub $AUTOLOAD { $val }";
- goto &$AUTOLOAD;
- }
-
-
- #######################################################################
- # STATIC OBJECT PROPERTIES
- #
- $VERSION = "0.03";
-
- #######################################################################
- # PUBLIC METHODS
- #
-
- #======== ### CLASS CONSTRUCTOR
- sub new {
- #========
- my($class, $file) = @_;
- my $self = {};
- my $ilink = 0;
- my $ifile = 0;
-
- ($ilink, $ifile) = _Instance();
-
- if($ilink and $ifile) {
- $self->{'ilink'} = $ilink;
- $self->{'ifile'} = $ifile;
- bless $self;
- # Initialize properties
- $self->{'File'} = "";
- $self->{'Path'} = "";
- $self->{'Arguments'} = "";
- $self->{'WorkingDirectory'} = "";
- $self->{'Description'} = "";
- $self->{'ShowCmd'} = 0;
- $self->{'Hotkey'} = 0;
- $self->{'IconLocation'} = "";
- $self->{'IconNumber'} = 0;
-
- $self->Load($file) if $file;
-
- } else {
- return undef;
- }
- $self;
- }
-
- #=========
- sub Load {
- #=========
- my($self, $file) = @_;
- return undef unless ref($self);
-
- my $result = _Load($self->{'ilink'}, $self->{'ifile'}, $file);
-
- if(defined($result)) {
-
- # fill the properties of $self
- $self->{'File'} = $file;
- $self->{'Path'} = _GetPath($self->{'ilink'}, $self->{'ifile'},0);
- $self->{'ShortPath'} = _GetPath($self->{'ilink'}, $self->{'ifile'},1);
- $self->{'Arguments'} = _GetArguments($self->{'ilink'}, $self->{'ifile'});
- $self->{'WorkingDirectory'} = _GetWorkingDirectory($self->{'ilink'}, $self->{'ifile'});
- $self->{'Description'} = _GetDescription($self->{'ilink'}, $self->{'ifile'});
- $self->{'ShowCmd'} = _GetShowCmd($self->{'ilink'}, $self->{'ifile'});
- $self->{'Hotkey'} = _GetHotkey($self->{'ilink'}, $self->{'ifile'});
- ($self->{'IconLocation'},
- $self->{'IconNumber'}) = _GetIconLocation($self->{'ilink'}, $self->{'ifile'});
- }
- return $result;
- }
-
-
- #========
- sub Set {
- #========
- my($self, $path, $arguments, $dir, $description, $show, $hotkey,
- $iconlocation, $iconnumber) = @_;
- return undef unless ref($self);
-
- $self->{'Path'} = $path;
- $self->{'Arguments'} = $arguments;
- $self->{'WorkingDirectory'} = $dir;
- $self->{'Description'} = $description;
- $self->{'ShowCmd'} = $show;
- $self->{'Hotkey'} = $hotkey;
- $self->{'IconLocation'} = $iconlocation;
- $self->{'IconNumber'} = $iconnumber;
- return 1;
- }
-
-
- #=========
- sub Save {
- #=========
- my($self, $file) = @_;
- return undef unless ref($self);
-
- return undef if not $file and not $self->{'File'};
- $file = $self->{'File'} if not $file;
-
- _SetPath($self->{'ilink'}, $self->{'ifile'}, $self->{'Path'});
- _SetArguments($self->{'ilink'}, $self->{'ifile'}, $self->{'Arguments'});
- _SetWorkingDirectory($self->{'ilink'}, $self->{'ifile'}, $self->{'WorkingDirectory'});
- _SetDescription($self->{'ilink'}, $self->{'ifile'}, $self->{'Description'});
- _SetShowCmd($self->{'ilink'}, $self->{'ifile'}, $self->{'ShowCmd'});
- _SetHotkey($self->{'ilink'}, $self->{'ifile'}, $self->{'Hotkey'});
- _SetIconLocation($self->{'ilink'}, $self->{'ifile'},
- $self->{'IconLocation'}, $self->{'IconNumber'});
-
- my $result = _Save($self->{'ilink'}, $self->{'ifile'}, $file);
- return $result;
- }
-
- #============
- sub Resolve {
- #============
- my($self, $flags) = @_;
- return undef unless ref($self);
- $flags = 1 unless defined($flags);
- my $result = _Resolve($self->{'ilink'}, $self->{'ifile'}, $flags);
- return $result;
- }
-
-
- #==========
- sub Close {
- #==========
- my($self) = @_;
- return undef unless ref($self);
-
- my $result = _Release($self->{'ilink'}, $self->{'ifile'});
- $self->{'released'} = 1;
- return $result;
- }
-
- #=========
- sub Path {
- #=========
- my($self, $value) = @_;
- return undef unless ref($self);
-
- if(not defined($value)) {
- return $self->{'Path'};
- } else {
- $self->{'Path'} = $value;
- }
- return $self->{'Path'};
- }
-
- #==============
- sub ShortPath {
- #==============
- my($self) = @_;
- return undef unless ref($self);
- return $self->{'ShortPath'};
- }
-
- #==============
- sub Arguments {
- #==============
- my($self, $value) = @_;
- return undef unless ref($self);
-
- if(not defined($value)) {
- return $self->{'Arguments'};
- } else {
- $self->{'Arguments'} = $value;
- }
- return $self->{'Arguments'};
- }
-
- #=====================
- sub WorkingDirectory {
- #=====================
- my($self, $value) = @_;
- return undef unless ref($self);
-
- if(not defined($value)) {
- return $self->{'WorkingDirectory'};
- } else {
- $self->{'WorkingDirectory'} = $value;
- }
- return $self->{'WorkingDirectory'};
- }
-
-
- #================
- sub Description {
- #================
- my($self, $value) = @_;
- return undef unless ref($self);
-
- if(not defined($value)) {
- return $self->{'Description'};
- } else {
- $self->{'Description'} = $value;
- }
- return $self->{'Description'};
- }
-
- #============
- sub ShowCmd {
- #============
- my($self, $value) = @_;
- return undef unless ref($self);
-
- if(not defined($value)) {
- return $self->{'ShowCmd'};
- } else {
- $self->{'ShowCmd'} = $value;
- }
- return $self->{'ShowCmd'};
- }
-
- #===========
- sub Hotkey {
- #===========
- my($self, $value) = @_;
- return undef unless ref($self);
-
- if(not defined($value)) {
- return $self->{'Hotkey'};
- } else {
- $self->{'Hotkey'} = $value;
- }
- return $self->{'Hotkey'};
- }
-
- #=================
- sub IconLocation {
- #=================
- my($self, $value) = @_;
- return undef unless ref($self);
-
- if(not defined($value)) {
- return $self->{'IconLocation'};
- } else {
- $self->{'IconLocation'} = $value;
- }
- return $self->{'IconLocation'};
- }
-
- #===============
- sub IconNumber {
- #===============
- my($self, $value) = @_;
- return undef unless ref($self);
-
- if(not defined($value)) {
- return $self->{'IconNumber'};
- } else {
- $self->{'IconNumber'} = $value;
- }
- return $self->{'IconNumber'};
- }
-
- #============
- sub Version {
- #============
- # [dada] to get rid of the "used only once" warning...
- return $VERSION;
- }
-
-
- #######################################################################
- # PRIVATE METHODS
- #
-
- #============ ### CLASS DESTRUCTOR
- sub DESTROY {
- #============
- my($self) = @_;
-
- if(not $self->{'released'}) {
- _Release($self->{'ilink'}, $self->{'ifile'});
- }
- }
-
- #======== ### PACKAGE DESTRUCTOR
- sub END {
- #========
- # print "Exiting...\n";
- _Exit();
- }
-
- #######################################################################
- # dynamically load in the Shortcut.pll module.
- #
-
- bootstrap Win32::Shortcut;
-
- # Preloaded methods go here.
-
- #Currently Autoloading is not implemented in Perl for win32
- # Autoload methods go after __END__, and are processed by the autosplit program.
-
- 1;
- __END__
-
-