Windows lnk-Files auslesen

06/12/2012 - 11:21 von wolfgang bauer | Report spam
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
 

Lesen sie die antworten

#1 Edzard Egberts
06/12/2012 - 19:00 | Warnen spam
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);
}

Ähnliche fragen