Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » IShellFolder2::GetDetailsOf() problem bei Verwendung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.03.2008, 13:13 Uhr
~Tobias_H
Gast


Hi,

ich möchte gerne die IShellFolder2::GetDetailsOf() verwenden um zusätzliche Informationen von Dateien in einem Ordner auszulesen.

Nun hab ich aber ernsthafte probleme diese Shelldinge zu benutzen.

IShellFolder2 ist ja selbst nur ein abstraktes Interfaces, was ich also nicht instanzieren kann. Was muss ich tun, wenn ich jetzt die Methode GetDetailsOf() aufrufen will?

hab das mal so probiert, aber das war ein Fehlschlag auf ganzer Linie


C++:
    SHELLDETAILS sd;
    IShellFolder2   shellfld;
    shellfld.GetDetailsOf(NULL, 0, &sd);


Funktiniert so gar nicht. Nun blicke ich bei den Shellobjekten aber so wenig durch, das ich nicht mal herausgefunden hab, wie ich den überhaupt den Pfad des Ordners setze den ich auslesen will.

Habe natürlich googel und msdn bemüht, aber ich finde leider keine beispiele die mir helfen. was ich finde sind massig VBA examples, wobei ich aus denen leider nicht schlau werde und verstehe was ih für c++ machen muss um das ans laufe zu kriegen.

kann mir da einer helfen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.03.2008, 15:24 Uhr
Kest
saint


Hi!

www.google.de/search?hl=de&q=IShellFolder2+GetDetailsOf+filetype%3Acpp&btnG=Suche&meta=
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.03.2008, 21:53 Uhr
~Tobias_H
Gast


ja danke, hat schon etwas geholfen

ich kriege alles ausgelesen, nur nicht die information, die z.b. bei word dokumenten als "Titel" angegeben wird.

was mach ich falsch, ich verstehs nicht, hab mir jett mal alle spalten ausgeben lassen und mir im debug angegeuckt, aber irgendwie ist diese "Titel" spalte ncht dabei.

dachte die DEtailsOf - Methode wäre dafür die richtige


C++:
// ListDirCon.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include "windows.h"
#include "shlobj.h"
#include <iostream>

using namespace std;

int _tmain(int argc, TCHAR* argv[])
{

char path[MAX_PATH] = "C:\\temp\\test";

    HRESULT hr;
    IShellFolder * isfDesktop = NULL;
    IShellFolder2 * isfCur = NULL;

   hr = CoInitialize(NULL); // initialize COM
   // NOTE: usually COM would be initialized just once in your main()

   LPMALLOC pMalloc = NULL; // memory manager, for freeing up PIDLs
   hr = SHGetMalloc(&pMalloc);
  
   hr = SHGetDesktopFolder(&isfDesktop);
   isfDesktop->QueryInterface(IID_IShellFolder2, (LPVOID*)&isfCur);

   // IShellFolder::ParseDisplayName requires the path name in Unicode.
   OLECHAR olePath[MAX_PATH]; // wide-char version of path name
   MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, path, -1, olePath, MAX_PATH);

   // parse path for absolute PIDL, and connect to target folder
   LPITEMIDLIST pidl = NULL; // general purpose
   hr = isfDesktop->ParseDisplayName(NULL, NULL, olePath, NULL, &pidl, NULL);
   LPSHELLFOLDER psfFolder = NULL;
   hr = isfDesktop->BindToObject(pidl, NULL, IID_IShellFolder,
                                 (void**)&psfFolder);
   isfDesktop->Release(); // no longer required
   pMalloc->Free(pidl);

   LPENUMIDLIST penumIDL = NULL; // IEnumIDList interface for reading contents
   hr = psfFolder->EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS,
                               &penumIDL);
   while(1) {
      // retrieve a copy of next local item ID list
      hr = penumIDL->Next(1, &pidl, NULL);

      if(hr == NOERROR) {
         WIN32_FIND_DATA ffd; // let's cheat a bit :)
         hr = SHGetDataFromIDList(psfFolder, pidl, SHGDFIL_FINDDATA, &ffd,
                                  sizeof(WIN32_FIND_DATA));

         SHELLDETAILS sd;
         hr = isfCur->GetDetailsOf(pidl, 0, &sd);
         hr = isfCur->GetDetailsOf(pidl, 1, &sd);
         hr = isfCur->GetDetailsOf(pidl, 2, &sd);
         hr = isfCur->GetDetailsOf(pidl, 3, &sd);
         hr = isfCur->GetDetailsOf(pidl, 4, &sd);
         hr = isfCur->GetDetailsOf(pidl, 5, &sd);
         hr = isfCur->GetDetailsOf(pidl, 6, &sd);
         hr = isfCur->GetDetailsOf(pidl, 7, &sd);

         cout << "Name = " << ffd.cFileName << endl;
         cout << "Type = " << ( (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                                ? "dir\n" : "file\n" );
         cout << "Size = " << ffd.nFileSizeLow << endl;
        
         pMalloc->Free(pidl);
      }
      // the expected "error" is S_FALSE, when the list is finished
      else break;
   }

   // release all remaining interface pointers
   penumIDL->Release();
   psfFolder->Release();
   pMalloc->Release();

   CoUninitialize(); // shut down COM



    return 0;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.03.2008, 12:00 Uhr
~Tobias_H
Gast


keiner eine Idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: