Format LNK (raccourcis windows) [Résolu]

Signaler
Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
-
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
Bonjour,


Apres des recherches sur Google et apres n'avoir rien trouver d'interessent, je me permet de poser la question ici, en esperons que quelqu'un pourais m'aider/me documenter.

Je suis a la recherche de documentation pratique sur le format de fichier .lnk, les seuls choses que je trouve sur le net cesont des exemples avec des API (en diverses langages), un SoundEx sur codes-sources ne donne rien!

Le but étant de demystifier ce format et d'en retenir qu'une serie de friwte()/fread(), les API et co ne m'interesse absolument pas.

Si quelqu'un dispose d'URL ou d'une doc qui pourais m'eguiller..


Merci d'avance.

3 réponses

Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
pas d'url, mais une réponse, la fonction que j'appelle pour créer des lnk.
par exemple ici ds le menu démarer.

#include <shlobj.h>

HRESULT createStartMenuShortcut(LPCTSTR lpszStartMenuFolder
, LPCTSTR lpszShortcutFile
, LPCTSTR lpszDescription
, LPCTSTR lpszArgs
, LPCTSTR lpszRelativeFolder
, OUT LPSTR lpszLnkFName
, int nMaxLnkFNameLength)
{
// find the current user's Start Menu Programs folder
HRESULT hr=NULL;
TCHAR szLink[_MAX_PATH];
ZeroMemory(szLink, _countof(szLink));
_tcscpy(szLink, lpszStartMenuFolder);
// proceed to create the shortcut
IShellLink*pIShellLink=NULL;
IPersistFile*ppf=NULL;
WCHAR pLinkUnicode[_MAX_PATH];
CoInitialize(NULL);
// get a pointer to the IShellLink interface.
hr=CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pIShellLink);
if(SUCCEEDED(hr))
{
// get a pointer to IPersistFile interface for saving shortcut
hr=pIShellLink->QueryInterface(IID_IPersistFile, (void**)&ppf);
if(SUCCEEDED(hr))
{
hr=pIShellLink->SetPath(lpszShortcutFile);
hr=pIShellLink->SetDescription(lpszDescription);
hr=pIShellLink->SetArguments(lpszArgs);
if(SUCCEEDED(hr))
{
// add the target folder to the Start Menu Programs path
lstrcat(szLink, _T("\"));
lstrcat(szLink, lpszRelativeFolder);
lstrcat(szLink, _T("\"));
// create the directory if it does not exist
CreateDirectory(szLink, NULL);
// add the file name for the shortcut
lstrcat(szLink, lpszDescription);
lstrcat(szLink, _T(".lnk"));
if(lpszLnkFName && nMaxLnkFNameLength > 0)
lstrcpyn(lpszLnkFName, szLink, nMaxLnkFNameLength);
// convert string to Unicode, and call IPersistFile::Save()
MultiByteToWideChar(CP_ACP, 0, szLink, -1, pLinkUnicode, _MAX_PATH);
hr=ppf->Save(pLinkUnicode, TRUE);
}
ppf->Release();
}
pIShellLink->Release();
}
CoUninitialize();
return hr;
}

___________________________________________________________
Magicalement
Nono
Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
3
Merci magic_Nono

Si les liens pour le menu demarrer sont comme les autres et juste mis dans un dossier bien special de Windows, alors sa peut me servir.

Je prend, reste a tout dechiffrer :)
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
oui, c'est similaire

___________________________________________________________
Magicalement
Nono