2013-03-02 3 views
0

나는 (존재하거나 삭제되었을 수있는) 폴더의 pidl을 가지고 있는데, 다음 코드로 IShellItem을 얻을 수 있지만, 필요한 것은 해당 폴더의 생성 날짜을 얻는 것입니다. PKEY_DateCreated로 가져올 수 있다고 가정합니다.하지만 어떻게해야할지 모르겠습니다.IShellItem의 생성 날짜를 검색하는 방법은 무엇입니까?

SHCreateShellItem(nil,nil,pidl,ShellItem); 

어떻게하면됩니까?

저는 Delphi를 사용합니다.

+0

이것은 델파이 문제가 아닙니다. 이것은 순수한 COM 쉘 질문입니다. –

+0

'IShellItem'을'IShellFolder2'에 바인드합니까? 아니면 PIDL에 바인딩합니까? –

+0

조사 후 질문을 변경했습니다. – user382591

답변

1

당신이 PIDL 당신이 개체의 기본 속성을 얻기 위해 SHGetDataFromIDList를 사용할 수있는 경우; IShellItem (또는 IShellItem2)을 전혀 필요로하지 않습니다. nFormat 매개 변수에 대해 SHGDFIL_FINDDATA을 지정하십시오 (자세한 내용은 http://msdn.microsoft.com/en-us/library/windows/desktop/bb762174(v=vs.85).aspx 참조).

좋은 점은 표준 파일 시스템 객체의 경우 메타 데이터가 PIDL 자체에서 인코딩되므로 객체가 더 이상 존재하지 않는 경우에도 유용한 데이터가 반환된다는 것입니다.

+0

SHGetDataFromIDList가 IShellFolder와 상대 pidl을 필요로하는 동안 그것은 좋은 것처럼 보이지만 절대 pidl만을가집니다. 어쩌면 나는 그들을 얻을 수 있지만 어떻게? – user382591

+0

'SHBindToParent' 함수를 참조하십시오. 또한 데스크탑 폴더를 부모로 사용하여 절대 경로를 전달할 수도 있습니다 (SHGetDesktopFolder를 통해 얻을 수 있습니다). –

2

순수 WINAPI 예 : 데이비드 헤퍼는 지적

IShellItem2* pItem2 = NULL; 
hr = pItem->QueryInterface(&pItem2); 
if (SUCCEEDED(hr)) 
{ 
    FILETIME ft = {0}; 
    pItem2->GetFileTime(PKEY_DateCreated, &ft); 
    SYSTEMTIME st = {0}; 
    ::FileTimeToSystemTime(&ft, &st); 
    wprintf(
     L"Date Created: %04d-%02d-%02d %02d:%02d:%02d\n", 
     st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); 
    pItem2->Release(); 
} 

또한, 당신은 ALL 쉘 항목이 생성 날짜를 가지고, 확신?

과 같이 보일 것 델파이로 번역 :

var 
    Item: IShellItem; 
    Item2: IShellItem2; 
    ft: TFileTime; 
    st: TSystemTime; 
.... 
Item2 := Item as IShellItem2; 
OleCheck(Item2.GetFileTime(PKEY_DateCreated, ft)); 
Win32Check(FileTimeToSystemTime(ft, st)); 
+0

좋지만 IShellItem2의 XP bacause에서는 작동하지 않습니다. 어떤 해결책? – user382591

관련 문제