tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
18
ZUGRIFFE
3296
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Alex Duschek
    Alex Duschek Alex Duschek ist offline I AM AWESOME
    Registriert seit
    Apr 2004
    Ort
    Bartholomä (Baden-Württemberg)
    Beiträge
    514
    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

  2. #2
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    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)
     

  3. #3
    Avatar von Alex Duschek
    Alex Duschek Alex Duschek ist offline I AM AWESOME
    Registriert seit
    Apr 2004
    Ort
    Bartholomä (Baden-Württemberg)
    Beiträge
    514
    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

  4. #4
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    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
     

  5. #5
    Avatar von Alex Duschek
    Alex Duschek Alex Duschek ist offline I AM AWESOME
    Registriert seit
    Apr 2004
    Ort
    Bartholomä (Baden-Württemberg)
    Beiträge
    514
    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

  6. #6
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    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
     

  7. #7
    Avatar von Alex Duschek
    Alex Duschek Alex Duschek ist offline I AM AWESOME
    Registriert seit
    Apr 2004
    Ort
    Bartholomä (Baden-Württemberg)
    Beiträge
    514
    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

  8. #8
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    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
     

  9. #9
    Avatar von Alex Duschek
    Alex Duschek Alex Duschek ist offline I AM AWESOME
    Registriert seit
    Apr 2004
    Ort
    Bartholomä (Baden-Württemberg)
    Beiträge
    514
    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

  10. #10
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    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
     

  11. #11
    Avatar von Alex Duschek
    Alex Duschek Alex Duschek ist offline I AM AWESOME
    Registriert seit
    Apr 2004
    Ort
    Bartholomä (Baden-Württemberg)
    Beiträge
    514
    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

  12. #12
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    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
     

  13. #13
    Avatar von Alex Duschek
    Alex Duschek Alex Duschek ist offline I AM AWESOME
    Registriert seit
    Apr 2004
    Ort
    Bartholomä (Baden-Württemberg)
    Beiträge
    514
    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

  14. #14
    Hellie Hellie ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Beiträge
    252
    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
     

  15. #15
    Avatar von Alex Duschek
    Alex Duschek Alex Duschek ist offline I AM AWESOME
    Registriert seit
    Apr 2004
    Ort
    Bartholomä (Baden-Württemberg)
    Beiträge
    514
    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

  1. Ftp Pfad ordner auslesen.
    Von ciberjoerg im Forum PHP
    Antworten: 0
    Letzter Beitrag: 03.11.08, 20:48
  2. Pfad auslesen
    Von TeddyEngel im Forum Delphi, Kylix, Pascal
    Antworten: 0
    Letzter Beitrag: 12.09.08, 11:44
  3. Pfad vom Programmstartordner auslesen
    Von ksk im Forum .NET Café
    Antworten: 0
    Letzter Beitrag: 04.11.06, 08:29
  4. Pfad aus MySQL-DB auslesen
    Von CikoNo1 im Forum PHP
    Antworten: 1
    Letzter Beitrag: 01.09.05, 07:44
  5. Verknüpfung mir relativem Pfad erstellen
    Von jean luc im Forum Microsoft Windows
    Antworten: 2
    Letzter Beitrag: 16.11.04, 12:52