winamp/Src/Winamp/SHELL.CPP

85 lines
2.0 KiB
C++

/** (c) Nullsoft, Inc. C O N F I D E N T I A L
** Filename:
** Project:
** Description:
** Author:
** Created:
**/
#include "main.h"
#include "../nu/ns_wc.h"
extern "C"
{
HRESULT ResolveShortCut(HWND hwnd, LPCWSTR pszShortcutFile, LPWSTR pszPath)
{
IShellLinkW *psl = 0;
WIN32_FIND_DATAW wfd = {0};
*pszPath = 0; // assume failure
HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (void **) & psl);
if (SUCCEEDED(hres))
{
IPersistFile *ppf = 0;
hres = psl->QueryInterface(IID_IPersistFile, (void **) &ppf); // OLE 2! Yay! --YO
if (SUCCEEDED(hres))
{
hres = ppf->Load(pszShortcutFile, STGM_READ);
if (SUCCEEDED(hres))
{
hres = psl->Resolve(hwnd, SLR_ANY_MATCH);
if (SUCCEEDED(hres))
{
wchar_t szGotPath[MAX_PATH] = {0};
StringCchCopyW(szGotPath, MAX_PATH, pszShortcutFile);
hres = psl->GetPath(szGotPath, MAX_PATH, & wfd,
SLGP_SHORTPATH );
StringCchCopyW(pszPath, MAX_PATH, szGotPath);
}
}
ppf->Release();
}
psl->Release();
}
return SUCCEEDED(hres);
}
/*void CreateShortCut(HWND hwnd, LPCSTR pszShortcutFile, LPCSTR pszExe, LPCSTR pszArg, int iconindex)
{
HRESULT hres;
IShellLink* psl;
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
IID_IShellLink, (void **) & psl);
if (SUCCEEDED(hres))
{
IPersistFile* ppf;
hres = psl->QueryInterface(IID_IPersistFile, (void **) & ppf); // OLE 2! Yay! --YO
if (SUCCEEDED(hres))
{
wchar_t wsz[MAX_PATH] = {0};
MultiByteToWideCharSZ(CP_ACP, 0, pszShortcutFile, -1, wsz, MAX_PATH);
hres = psl->SetPath(pszExe);
if (pszArg)
{
psl->SetArguments(pszArg);
}
psl->SetIconLocation(pszExe, iconindex);
if (SUCCEEDED(hres))
{
ppf->Save(wsz, TRUE);
}
ppf->Release();
}
psl->Release();
}
}*/
void Shell_Free(void *p)
{
CoTaskMemFree(p);
}
}