Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Windows lnk-Files auslesen

27 views
Skip to first unread message

wolfgang bauer

unread,
Dec 6, 2012, 5:21:56 AM12/6/12
to
Hallo

Ich finde nichts wirklich brauchbares zum Thema. Ich möchte Shortcuts
(also lnk-Files bzw. Verknüpfungen) auslesen.

Gibt es Unterschiede im Aufbau? Oder sind diese Dateien immer
nach demselben Schema aufgebaut ? Gibt es API-Funktionen?
Ich programmiere in C / Cpp.



--

Gruss

Edzard Egberts

unread,
Dec 6, 2012, 1:00:22 PM12/6/12
to
wolfgang bauer schrieb:
> Ich finde nichts wirklich brauchbares zum Thema. Ich möchte Shortcuts
> (also lnk-Files bzw. Verknüpfungen) auslesen.
>
> Gibt es Unterschiede im Aufbau? Oder sind diese Dateien immer
> nach demselben Schema aufgebaut ?

Mach' die lnk-Datei doch einfach mal auf - für in Updateprogramm habe
ich so etwas mal gemacht, im Autostart die Links durchgegangen und die
alte Version (anhand des Programmnamens) gelöscht. Da sind aber
verschiedene Formate drin.

> Gibt es API-Funktionen?

Shell-API oder so. Ich habe hier noch etwas Code, der könnte Dir
weiterhelfen:

bool os_fkt::CreateLink(string PathObj, string PathLink, string Desc)
/*
Vor Aufruf dieser Funktion muß die COM-Schnittstelle mit
CoInitialize(0) initialisiert und nach der letzten Anwendung
dieser Funktion mit CoUninitialize() freigegeben werden. Zu diesem
Zweck wird eine statische Struct verwendet, die beim ersten Aufruf dieser
Funktion die Initialisierung durchführt und bei Programmende
automatisch Uninitialize() aufruft.
*/
{
static com_init Com_Init; // CoInitialize/ Uninitialize bearbeiten

HRESULT hres;
void* psl;
// Get a pointer to the IShellLink interface.
hres = CoCreateInstance(CLSID_ShellLink, NULL,
CLSCTX_INPROC_SERVER, IID_IShellLink, &psl);

if (SUCCEEDED(hres)) {
void* ppf;

// Set the path to the shortcut target, and add the
// description.
reinterpret_cast< IShellLink* >(psl)->SetPath(PathObj.c_str());
reinterpret_cast< IShellLink* >(psl)->SetDescription(Desc.c_str());

// Query IShellLink for the IPersistFile interface for saving the
// shortcut in persistent storage.
hres = reinterpret_cast< IShellLink*
>(psl)->QueryInterface(IID_IPersistFile, &ppf);

if (SUCCEEDED(hres)) {
wchar_t wsz[MAX_PATH];

// Ensure that the string is ANSI.
MultiByteToWideChar(CP_ACP, 0, PathLink.c_str(), -1,
wsz, MAX_PATH);

// Save the link by calling IPersistFile::Save.
hres = reinterpret_cast< IPersistFile* >(ppf)->Save(wsz, TRUE);
reinterpret_cast< IPersistFile* >(ppf)->Release();
}
reinterpret_cast< IShellLink* >(psl)->Release();
}
return SUCCEEDED(hres);
}


Alex Strobel

unread,
Dec 6, 2012, 5:15:39 PM12/6/12
to
Bei so was hilft mir recht häufig Wotsit.org
In Deinem Fall: http://wotsit.org/list.asp?search=lnk&button=GO!

Gruß
Alex

wolfgang bauer

unread,
Dec 7, 2012, 1:42:33 PM12/7/12
to
wolfgang bauer <sch...@gmx.de> schrieb:


Danke für die Antworten. Über Wotsit.org habe ich eine gute und immer
noch gültige Formatbeschreibung gefunden. Damit habe ich mir meine
eigene Funktion geschrieben die die Daten ausliesst.

--

Gruss
0 new messages