Entwickler-Ecke

Windows API - Aufruf e. Methode in der Api / Auslesen d. Zieles in e. .LNK


Peter18 - Mo 08.02.10 17:01
Titel: Aufruf e. Methode in der Api / Auslesen d. Zieles in e. .LNK
Ein freundliches Hallo an alle,

ich möchte den Pfad auf eine Datei aus einer ".LNK"-Datei lesen. Dazu möchte ich einen Api-Aufruf verwenden um Fehler zu vermeiden, wenn sich die Dateistruktur ändert. Nach langer Suche habe ich "IShellLink::GetPath Method" gefunden. Da es eine Methode ist funktioniert

Delphi-Quelltext
1:
2:
3:
4:
function GetPath(pszPath: PChar;
                cchMaxPath: Longint;
                pfd: WIN32_FIND_DATA;
                fFlags: Longint): Integer; external 'shell32.dll';
nicht. Kann mir jemand einen Tipp geben, was in diesem Fall zu tun ist?

Ach ja, ich verwende Delphi 4.

Freundliche Grüße von der Nordsee!


platzwart - Mo 08.02.10 17:10

Was meinst du mit "Weil es eine Methode ist, funktioniert es nicht"?


BenBE - Mo 08.02.10 17:19

In der Deklaration fehlt noch mindestens ein stdcall; ...


Peter18 - Mo 08.02.10 17:23

Hallo platzwart,

es kommt die Fehlermeldung "... wurde nicht gefunden". Ich nehme an, dass geschieht, weil es eine Methode von "IShellLink" ist und ähnlich wie bei Delphi (IShellLink.GetPath) deklariert werden muss. Leider weiß ich nicht wie das syntaktisch in Pascal aussehen muss und habe noch keine Hinweise gefunden.


Freundliche Grüße von der Nordsee!


Peter18 - Mo 08.02.10 17:29

Hallo BenBE,

danke für den Hinweis, hatte ich übersehen, aber funktioniert auch damit nicht.

Grüße von der Nordsee


BenBE - Mo 08.02.10 17:44

IShellLink ist ein Interface. Das musst du dementsprechend auch in Delphi so deklarieren. Zusätzlich musst Du dir das zugehörige Objekt holen.

Delphi liefert für IShellLink IIRC die Deklaration in einer der zahlreichen Units schon mit (könnte ShellObj sein). Beispiele zur Verwendung dürfte es im Forum oder bei den Schweizern geben.


Peter18 - Mo 08.02.10 19:26

Hallo BenBE,

habe die IShellLink-Sachen in der ShellObj gefunden, aber leider ist die Dokumentation meiner Delpi-Version schlecht und beim Umbau bekomme ich die Fehlermeldung "Inkompatible Typen: 'Array' und 'String' wenn ich den Dateipfad übergeben will. Eigentlich sind Strings ja "Array of Char" und bei Microsoft in der "WIN32_FIND_DATA Structure" ein "TCHAR cFileName[MAX_PATH]". Leider habe ich die Delphi-Deklaration "TWin32FindData" nicht finden können und die Hilfe schweigt sich zu diesem Thema aus. Vielleicht hat ja jemand einen Tipp, bevor ich Stunden probiere. Passende Beispiele habe ich bis her leider auch noch nicht gefunden.

Grüße von der Nordsee


BenBE - Mo 08.02.10 23:06

TChar <> Char. Außerdem Array of Char in C ist in Delphi wesentlich besser als PChar zu übersetzen.

Bei den Delphi-Typen eher noch ein A bzw. W anhängen, je nach dem ob AnsiChar oder Widechar.

Außerdem: Das IShellLink-Interface aus der ShellObj ist schon vollständig; incl. der zu verwendenden Typen.


Peter18 - Di 09.02.10 11:11

Hallo BenBE,

PChar hatte ich probiert, mit dem gleichen Ergebnis. Auch Anhängen von A oder W hat nichts gebracht. Laut Microsoft ist TChar:
Zitat:
The TCHAR data type is a Win32 character string that can be used to describe ANSI, double-byte character set (DBCS), or Unicode strings. For ANSI and DBCS platforms, TCHAR is defined as shown in the following Syntax section. For Unicode platforms, TCHAR is defined as synonymous with the WCHAR type.

Es kommt also darauf an, wie es in Delphi deklariert ist. Aber beim Stöbern mit verschiedenen bei MS gefundenen Stichworten habe ich mit "WIN32_FIND_DATA" die richtige Lösung gefunden:
http://www.delphi-forum.de/viewtopic.php?t=78676&highlight=win32finddata :D
Hier ist ein Quelltext, mit dem der Link ausgewertet werden kann.

Grüße von der Nordsee


BenBE - Di 09.02.10 14:25

user profile iconPeter18 hat folgendes geschrieben Zum zitierten Posting springen:
Hier ist ein Quelltext, mit dem der Link ausgewertet werden kann.

Grüße von der Nordsee

Welcher Quelltext :nixweiss: Oder meinst im Link?


Peter18 - Di 09.02.10 15:53

Hallo BenBE,

einfach dem Link folgen. Ist hier im Forum.

Grüße von der verscheiten Nordsee