ERLEDIGT
JA
JA
ANTWORTEN
18
18
ZUGRIFFE
3296
3296
EMPFEHLEN
-
07.12.05 17:43 #1
Jo,ich steh mal wieder im Wald und komm nicht weiter

Ich suche derzeit Möglichkeiten (wobei ich mit einer schon zufrieden wäre
), wie ich den Zielpfad einer Verknüpfung auslesen kann. Dazu hab ich bereits mehrere Ansätze gefunden. Zum einen einen Code auf SwissDelphiCenter hier, der zwar wohl funktioniert, nur hab ich dabei ein Problem:
Ich lese per Schleife nach und nach Items einer ListView-Komponente ein (also die Pfade der Verknüpfungen), jedoch bekomme ich die Meldung "Inkompatible Typen: TListItem und String" und wie ich sowas konvertieren kann hab ich leider auch noch nicht ergründet *g*
Zum anderen hab ich in Foren gelesen, es ginge per IShellLink (der fertige Code verfährt auch nach dem Prinzip). Da hab ich mich dann auf die Suche gemacht, jedoch bei Google nicht wirklich Gutes auf Deutsch gefunden und in der MS SDK findet sich zwar genug Material, jedoch ist es für C++ geschrieben und dass ich den Code in Delphi umschreiben kann,bezweifle ich stark
Ich bräuchte nun entweder Hilfe zum Thema IShellLink,möglichst mit Beispielen oder eine Anregung, wie ich ListView Items in Strings umwandeln kann.Bin für jegliche Hilfe dankbar
Softwareentwickler
Sehr gute Kenntnisse: Delphi, Java
Gute Kenntnisse: PHP, ADA
Grundkenntnisse: C/C++, C#, JavaScript
-
In der Delphi-Hilfe steht was von Eigenschaften von TListItems, u.a. Caption. Ohne je damit gearbeitet zu haben: könnte es damit funktionieren? Oder über SubItems? k.a., vielleicht klappt es ja damit...
lg Hellie
PS: Hab mir nen Bissl was zusammengebatzt und es scheint über die Cption zu gehen (bei ner sehr ... öhm... rudimentären
ListView )...
Geändert von Hellie (07.12.05 um 21:23 Uhr)
-
07.12.05 20:52 #3
Also ich sollte vielleicht noch erwähnen, dass die ListView im Style vsReport ist,ist eventuell auch relevant.
Jedenfalls, wenn ich die Caption des ersten Items ansprechen will mit ...
Code :1
LinkInfo.FullPathAndNameOfLinkFile := GetDeskTopPath + '\' + ListView1.Items[0].Caption;
...kommt "Inkompatible Typen: Array und String"
Ich hab den oben beschriebenen Code benutzt und außer die Meldung kommt nichts weiteres. Mit der Hilfe zu TListItems befass ich mich nachher,vielleicht ergibt sich noch etwas
Softwareentwickler
Sehr gute Kenntnisse: Delphi, Java
Gute Kenntnisse: PHP, ADA
Grundkenntnisse: C/C++, C#, JavaScript
-
Also bei mir geht es trotzdem. Wenn der Fehler in der Zeile liegt, liegt das entweder an der Delphi-Version (ich benutze D7) oder an der Deklaration von LinkInfo.FullPathAndNameOfLinkFile oder GetDeskTopPath würde ich sagen. Wären für mich die logischsten Erklärungen...
lg Hellie
-
07.12.05 21:29 #5
Hmm...also LinkInfo.FullPathOfNameAndLinkFile verlangt ein Array, jedoch sind GetDesktopPath sowie ListView1.Items[0].Caption Strings. Wie kann ich daraus ein Array machen, damit das passt?
Ansonsten seh ich auch keinen Fehler
PS Delphi7
Softwareentwickler
Sehr gute Kenntnisse: Delphi, Java
Gute Kenntnisse: PHP, ADA
Grundkenntnisse: C/C++, C#, JavaScript
-
Wenn es um den Code aus dem Link geht und LinkInfo vom Typ TShellLinkInfoStruct ist, dann gibt es zwei Wege:
Es ist ein Array of Char, also eine Zeichenkette. Die ist in der Länge beschränkt und deshalb hat man das Array genommen. Ich habe den Code nicht genau angeschaut, aber theoretisch könnte man für jedes Array[0..maxLength] of Char auch string[maxlength+1] schreiben (begrenzt beides auf eine bestimmte Anzahl). Damit müsste es also gehen.
Ansonsten kann man das ganze auch in einer Zählschleife unterbringen, die bis maxlength geht (von 0), und dann in einer einseitigen Verzewigung schauen, ob der String wirklich so lang ist, wenn das der Fall ist, übernimmt man das i.te Zeichen, ansonsten nimmt man einfach #32 (Leerzeichen), um den Char auszufüllen. Damit solltest du auf der sicheren Seite sein.
lg Hellie //die sich jetzt ins Bettchen fallen lässt
-
08.12.05 20:19 #7
Ich versteh überhaupt nix, da bräuchte ich ein Codebeispiel, wie ich das umsetzen kann
Softwareentwickler
Sehr gute Kenntnisse: Delphi, Java
Gute Kenntnisse: PHP, ADA
Grundkenntnisse: C/C++, C#, JavaScript
-
Code :
1 2 3 4 5 6 7 8
for i:=1 to maxLenght+1 do begin pfad:=GetDeskTopPath + '\' + ListView1.Items[0].Caption; if i<=length(pfad) then LinkInfo.FullPathAndNameOfLinkFile[i-1]:= pfad[i] else LinkInfo.FullPathAndNameOfLinkFile[i-1]:= ' '; end;
Is jetzt während eines Telefonates entstanden, einfach ausprobieren, vielleicht geht es ja
lg Hellie
PS: Wenn nicht oder wenn Fragen, noch mal melden
-
09.12.05 20:10 #9
Jo,da hab ich viel zu fragen und zwar:
Was ist "i"? Ein Zähler,also vermutlich Integer.
Was ist "pfad"? Als was muss ich diese Variable deklarieren? Array [0..xx] Of Char?
Außerdem versteh ich "maxlength+1" nicht (übrigens Buchstabendreher drinne
) MaxLength von was?
Edit:
Ok,pfad ist wohl ein String,aber das "MaxLength+1" kann ich noch nicht einordnen...Softwareentwickler
Sehr gute Kenntnisse: Delphi, Java
Gute Kenntnisse: PHP, ADA
Grundkenntnisse: C/C++, C#, JavaScript
-
Hatte mich vertan, hieß maxpath im Code, auf den du verlinkt hattest. Der gibt die maximale Länge des Strings an, die der Pfad haben kann. Und Pfad ist einfach nur ein String, um den gesamten Pfad speichern zu können...
Klappt es denn?
lg Hellie
-
10.12.05 20:21 #11
Naja, der Compiler gibt nun keine Fehlermeldung mehr von sich,allerdings wird wohl der "else" Teil deines Code Beispiels ausgeführt,ich seh also keinen Pfad

Des Weiteren scheint der Code nicht richtig zu funktionieren, denn egal welche Verknüpfung ich angebe, ich erhalte in keinen Falle die Pfad zur verlinkten Datei,um den es mir ja eigentlich geht
Softwareentwickler
Sehr gute Kenntnisse: Delphi, Java
Gute Kenntnisse: PHP, ADA
Grundkenntnisse: C/C++, C#, JavaScript
-
Wie hast du denn maxpath festgelegt? und welcher Code geht nicht? Der aus dem Link, meiner oder beide in Combi? Und das, was bei meinem kleinen Schnipselchen rauskommt, ist ein langer Code nur mit leerzeichen oder wie muss ich mir das vorstellen?
lg Hellie
-
10.12.05 21:22 #13
Bei dem Code,den ich im ersten Beispiel gepostet habe,steht ein Beispielaufruf dabei.Den hab ich verwendet, um den Code zu testen und dazu hab ich als Verknüpfung eine x-beliebige genommen.Die Daten dieser Verknüpfung werden in einem MemoFeld aufgelistet, jedoch wird mir dort niemals die Datei, welche das Ziel meiner Verknüpfung ist, angezeigt.Es wird mir lediglich der Pfad der Verknüpfung aufgelistet.
Ergo:
"FullPathAndNameOfLinkFile" wird angezeigt
"FullPathAndNameOfFileToExecute" wird leider nicht angezeigt
Wenn ich nun deinen Beispielcode benutze (Maxlength hab ich durch Max_Path ersetzt,dann gings), wird mir leider nicht einmal "FullPathAndNameOfLinkFile" angezeigt, also muss sich ein Fehler eingeschlichen haben, der immer auf deinen "else" Teil verweist.
Ich hoffe,dass du mich verstehst
Softwareentwickler
Sehr gute Kenntnisse: Delphi, Java
Gute Kenntnisse: PHP, ADA
Grundkenntnisse: C/C++, C#, JavaScript
-
Nimm den else-Teil einfach raus. Dadurch wird der String verfälscht und es findet die Datei nicht mehr. Sorry, ich wusste nicht, dass das so geht. Aber bei mir zeigt es jetzt den Pfad zur auszuführenden Datei dann an...
lg Hellie
-
10.12.05 22:26 #15
Hmpf...bei mir ned

Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
procedure TForm1.Button1Click(Sender: TObject); const br = #13#10; var LinkInfo: TShellLinkInfoStruct; s: string; i: integer; pfad: string; begin for i:=1 to Max_Path+1 do begin pfad:=GetDeskTopPath + '\' + ListView1.Items[0].Caption; if i<=length(pfad) then LinkInfo.FullPathAndNameOfLinkFile[i-1]:= pfad[i]; end; FillChar(LinkInfo, SizeOf(LinkInfo), #0); GetLinkInfo(@LinkInfo); s := LinkInfo.FullPathAndNameOfLinkFile + br + LinkInfo.FullPathAndNameOfFileToExecute; Memo1.Lines.Add(s); end;
Jetzt werden leider nur 2 leere Zeilen ins Memo geschrieben ohne den "else" Teil...Softwareentwickler
Sehr gute Kenntnisse: Delphi, Java
Gute Kenntnisse: PHP, ADA
Grundkenntnisse: C/C++, C#, JavaScript
Ähnliche Themen
-
Ftp Pfad ordner auslesen.
Von ciberjoerg im Forum PHPAntworten: 0Letzter Beitrag: 03.11.08, 20:48 -
Pfad auslesen
Von TeddyEngel im Forum Delphi, Kylix, PascalAntworten: 0Letzter Beitrag: 12.09.08, 11:44 -
Pfad vom Programmstartordner auslesen
Von ksk im Forum .NET CaféAntworten: 0Letzter Beitrag: 04.11.06, 08:29 -
Pfad aus MySQL-DB auslesen
Von CikoNo1 im Forum PHPAntworten: 1Letzter Beitrag: 01.09.05, 07:44 -
Verknüpfung mir relativem Pfad erstellen
Von jean luc im Forum Microsoft WindowsAntworten: 2Letzter Beitrag: 16.11.04, 12:52





Zitieren
Login





