Windows Verknüpfungen mit Win32::Shortcut editieren
Inhalt:
Vorwort
Windows Verknüfpfungen, lassen sich nicht so einfach auslesen und bearbeiten wie z.B. Favoriten (.url).
Doch dank des Moduls Win32::Shortcut (Im Standardumfang von
ActivePerl vorhanden) ist dies möglich.
Ich möchte dir die Funktionsweise des Moduls anhand einiger Beispiele erläutern:
Daten auslesen
In dem folgenden Beispiel lesen wir den Ziel-Pfad, den Dos-kompatiblen Ziel-Pfad und das Arbeitsverzeichnis aus einer Testverknüpfung aus.
Verknüpfung auslesen
use strict;
use warnings;
use Win32::Shortcut;
# Testverknüpfung zu Perl
my $verkn = 'c:\\temp\\test.lnk';
# Objekt aus Klasse Win32::Shortcut erstellen
my $sc = Win32::Shortcut->new();
# Durch Aufruf der Methode "Load" die Datei dem Modul übergeben
$sc->Load($verkn) or die "Konnte Verknuepfung nicht laden: $!";
# Pfad (lang) ausgeben
print $sc->Path(),"\n";
# Pfad (kurz, kompatibel zur DOS-Box) ausgeben
print $sc->ShortPath(),"\n";
# Arbeitsverzeichnis ausgeben
print $sc->WorkingDirectory(),"\n";
__END__
C:\Perl\bin\perl.exe
C:\Perl\bin\perl.exe
C:\Perl\bin
Daten ändern
Jetzt haben wir schonmal ein paar Daten aus der Verknüpfung ausgelesen.
der nächste Schritt ist, Daten einer Bestehenden Verknüpfung zu ändern.
z.B.: Ein anderes Icon für die Verknüpfung festlegen:
Icon von Verknüpfung ändern
use strict;
use warnings;
use Win32::Shortcut;
# Testverknüpfung zu Perl
my $verkn = 'c:\\temp\\test.lnk';
# Objekt aus Klasse Win32::Shortcut erstellen
my $sc = Win32::Shortcut->new($verkn);
# Das Laden haben wir jetzt implizit mit der methode new erledigt
# Festlegen woher das Icon kommt
# (In der Regel .ico und .exe und Windows-Standard .dll Dateien)
my $iconpath = 'C:\\WINDOWS\\system32\\SHELL32.dll';
# Die Iconnummer (muss man am besten ausprobieren da
# Die Art wie die Icons gezählt werden vom Betriebssystem abhängt
my $iconnumber = 13;
# Werte an das Objekt übergeben
$sc->IconLocation($iconpath);
$sc->IconNumber($iconnumber);
# Und in Verknüpfung zurückspeichern
$sc->Save() and
print "Wenn es es XP ist, sollte die Verknüpfung ein Symbol als Weltkugel haben.\n";
__END__
Wenn es es XP ist, sollte die Verknüpfung ein Symbol als Weltkugel haben.
Wow jetzt können wir also schon Verknüpfungen anpassen.
Genau so verhält es sich auch, wenn man eine neue Verknüpfung erstellen möchte.
Mit dem kleinen Unterschied, dass man die Datei nicht der Klasse übergibt (lädt) sondern das Objekt
leer erstellt, die Werte zuweist und dann der Methode "Save" den Dateinamen übergibt:
$sc->Save($verkn);.
Prüfen ob Ziel existiert und versuchen es zu finden
In dem nächsten Beispiel wollen wir aus dem Aktuellen Verzeichnis alle Links einlesen, prüfen ob die Datei existiert.
Wenn sie nicht existiert, soll Win32::Shortcut versuchen die Zieldatei zu finden.
Zielauflösungsversuch
use strict;
use warnings;
use Win32::Shortcut;
use File::Find;
# Suchen nach allen *.lnk Datei im aktuellen Verzeichnis (rekursiv)
# Und über gib diese an die Funktion check_sc
find(sub {check_sc($File::Find::name) if /\.lnk$/},'.');
sub check_sc ($) {
# Dateinamen in Varialbe speichern
my $file = shift;
# Neues Objekt mit dem Inhalt von $file erstellen
my $sc = Win32::Shortcut->new($file);
# Wenn das Ziel nicht existiert
unless (-e $sc->Path()) {
print "Versuche Ziel wieder zu finden\n";
# Merken des momentanen Pfades
my $oldpath = $sc->Path();
# Versuchen eine Alternative mittels der Mehthode "Resolve" zu finden...
my $newpath = $sc->Resolve();
# Wenn erfolgreich...
if ($newpath ne $oldpath) {
print "Alternative gefunden: $newpath\n";
# Setzten des neues Wertes...
$sc->Path($newpath);
# Und speichern
$sc->Save();
}
else {
# Ansonsten Meldung
print "Keine Alternative für $file gefunden\n";
}
}
else {
# Wenn Ziel existiert -> Meldung
print "Verknüpfungsziel existiert\n";
}
}
__END__
Verknüpfungsziel existiert
Versuche Ziel wieder zu finden
Alternative gefunden: C:\Temp\functions.js
Verknüpfungsziel existiert
Verknüpfungsziel existiert
Ich hatte vier Verknüpfungen in dem Verzeichnis und von einem manuell das Ziel umbenannt.
Die Ausgabe des Programmes sagt eigendlich alles.
Nachwort
Jetzt können wir schon richtig was anfangen mit so einem kleinen Programm. z.B.: Mal alle Links auf unserem Rechner aufräumen
Dieses Tutorial bezieht sich auf die offizielle Dokumentation von
Win32::Shortcut auf
CPAN
--
AlexKoeppe - 27 Aug 2003