.LNK
От: xZero  
Дата: 23.07.03 19:42
Оценка:
Как из этих файлов вытащить название файла, который они запускают?
Re: .LNK
От: Alex Fedotov США  
Дата: 23.07.03 20:10
Оценка:
Здравствуйте, xZero, Вы писали:

Z>Как из этих файлов вытащить название файла, который они запускают?


IShellLink.
-- Alex Fedotov
Re: .LNK
От: Рома Россия  
Дата: 23.07.03 20:36
Оценка: 1 (1)
Здравствуйте, xZero, Вы писали:

Z>Как из этих файлов вытащить название файла, который они запускают?

Пожалуйста.
HRESULT GetLinkPath(LPCSTR pszShortcutFile, LPSTR pszPath)
{
  HRESULT hres;
  IShellLink* psl;
  WIN32_FIND_DATA wfd;

  *pszPath = 0;   // assume failure

  CoInitialize(NULL);

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

    // Get a pointer to the IPersistFile interface.
    hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
    if (SUCCEEDED(hres))
    {
      WORD wsz[MAX_PATH];

      // Ensure string is Unicode.
      MultiByteToWideChar(CP_ACP, 0, pszShortcutFile, -1, wsz,
                                 MAX_PATH);

     // Load the shell link.
     hres = ppf->Load(wsz, STGM_READ);
     if (SUCCEEDED(hres))
     {
          // Get the path to the link target.
          hres = psl->GetPath(pszPath, MAX_PATH, (WIN32_FIND_DATA *)&wfd, 
                 SLGP_SHORTPATH );
          if (!SUCCEEDED(hres))
             MessageBox(NULL, "GetPath failed!", NULL, 0);
      }
      // Release pointer to IPersistFile interface.
      ppf->Release();
    }
    // Release pointer to IShellLink interface.
    psl->Release();
  }
  CoUninitialize();
  return hres;
}

На вход — путь к ярлыку и массив под путь к файлу на MAX_PATH + 1 char'ов.
Пользуйся MSDN, 80% кода оттуда, я лишь кое-что подправил.
... << RSDN@Home 1.0 beta 7a >>
Re: .LNK
От: oles  
Дата: 23.07.03 21:12
Оценка:
Здравствуйте, xZero, Вы писали:

Z>Как из этих файлов вытащить название файла, который они запускают?


IObject := CreateComObject(CLSID_ShellLink);
SLink := IObject as IShellLink;
SFile := IObject as IPersistFile;
StringToWideChar(strFile,f,MAX_PATH);
SFile.Load(f,STGM_READ);
SLink.Resolve(MainForm.Handle,SLR_ANY_MATCH);
SLink.GetPath(path,MAX_PATH,data,0);

WBR, oles
... << RSDN@Home 1.1 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.