Hey, does any1 here know how to get the real filename of a shortcut file in windows? .lnk that is
This is a discussion on Gettings the real Filename of a shortcur file within the Windows Programming forums, part of the Platform Specific Boards category; Hey, does any1 here know how to get the real filename of a shortcut file in windows? .lnk that is...
Hey, does any1 here know how to get the real filename of a shortcut file in windows? .lnk that is
You can get the format of a .lnk and sample processing code here.
Wave upon wave of demented avengers march cheerfully out of obscurity unto the dream.
Here's a function.
Code:#include <windows.h> #include <objidl.h> /* For IPersistFile */ #include <shlobj.h> /* For IShellLink */ #if defined(_MSC_VER) #pragma comment(lib, "ole32.lib") #pragma comment(lib, "uuid.lib") #endif /* * GetShortcutTarget * Retrieves the path that a shortcut file points to. * * Paramaters: * szShortcutFile The path to the shortcut file. * szTarget Pointer to a buffer that will receive the target path. * The buffer length should be at least MAX_PATH characters. * cchTarget The size of the szTarget buffer, in characters. * * Return: * A non-zero value is returned on success. If the function fails zero * will be returned. GetLastError can NOT be called to get an additional error code. * * Runtime requirements: * CoInitialize or CoInitializeEx must have been called before using this function. * * Compile requirements: * C++. Include <windows.h>, <objidl.h> & <shlobj.h>. Link "uuid.lib". */ BOOL GetShortcutTarget(LPCTSTR szShortcutFile, LPTSTR szTarget, SIZE_T cchTarget) { IShellLink* psl = NULL; IPersistFile* ppf = NULL; BOOL bResult = FALSE; if (FAILED( CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **) &psl) )) goto cleanup; if (FAILED( psl->QueryInterface(IID_IPersistFile, (void **) &ppf) )) goto cleanup; # if !defined(UNICODE) WCHAR wsz[MAX_PATH]; if (0 == MultiByteToWideChar(CP_ACP, 0, szShortcutFile, -1, wsz, MAX_PATH) ) goto cleanup; # else LPCWSTR wsz = szShortcutFile; # endif if (FAILED( ppf->Load(wsz, STGM_READ) )) goto cleanup; if (NOERROR != psl->GetPath(szTarget, cchTarget, NULL, 0) ) goto cleanup; bResult = TRUE; cleanup: if (ppf) ppf->Release(); if (psl) psl->Release(); if (!bResult && cchTarget != 0) szTarget[0] = TEXT('\0'); return bResult; } #if 1 /* Test code. */ #include <stdio.h> #include <tchar.h> int main(void) { TCHAR szTarget[MAX_PATH]; CoInitialize(NULL); GetShortcutTarget( TEXT("C:\\Documents and Settings\\All Users\\Start Menu\\") TEXT("Programs\\Accessories\\Calculator.lnk"), szTarget, MAX_PATH); _tprintf(TEXT("The shortcut target is '%s'.\n"), szTarget); CoUninitialize(); getchar(); return 0; } #endif
wow thks to both, especially for the function its great![]()