デスクトップ内のアイテム一覧

  LboxEnumShellFolder



  
// *********************************************************
// リストボックスにデスクトップ内のアイテム一覧を追加
// 戻り値 : 無し
// *********************************************************
void LboxEnumShellFolder( HWND hList, int nIndex, LPCTSTR szTarget )
{
	HRESULT			hr;
	IShellFolder	*pDesktop;
	IShellFolder	*pTarget;
	IEnumIDList 	*pEnum;
	ULONG			pceltFetched;
	LPITEMIDLIST	pidlTarget;
	LPITEMIDLIST	pidlItem;
	STRRET			str;
	char			szName[MAX_PATH];
	LPTSTR szBuffer;

	_bstr_t			Target("");
	Target.operator = (szTarget);

	hr = SHGetDesktopFolder( &pDesktop );
	if( FAILED( hr ) ) {
		return;
	}
 
	hr = pDesktop->ParseDisplayName(
		NULL,
		NULL,
		Target,
		NULL,
		&pidlTarget,
		NULL
	);
	if ( pidlTarget == NULL ) {
		pDesktop->Release();
		return;
	}

	hr = pDesktop->BindToObject(
				pidlTarget,
				NULL,
				IID_IShellFolder,
				(LPVOID*)&pTarget
			);
	if( FAILED( hr ) ) {
		pDesktop->Release();
		return;
	}

	hr = pTarget->EnumObjects(
				NULL,
				SHCONTF_FOLDERS | 
				SHCONTF_NONFOLDERS |
				SHCONTF_INCLUDEHIDDEN,
				&pEnum
	);
	if( FAILED( hr ) ) {
		pTarget->Release();
		pDesktop->Release();
		return;
	}

	szBuffer = new char[MAX_PATH*2];
	while( 1 ) {
 
		hr = pEnum->Next( 1, &pidlItem, &pceltFetched );
		if( FAILED( hr ) ) {
			break;
		}
		if ( pceltFetched == 0 ) {
			break;
		}
 
		hr = pTarget->GetDisplayNameOf( pidlItem, SHGDN_NORMAL, &str );
		if( FAILED( hr ) ) {
			continue;
		}
 
		switch( str.uType ) {
			case STRRET_WSTR:
				WideCharToMultiByte( CP_ACP,
						0,
						str.pOleStr,
						-1,
						szName,
						MAX_PATH,
						NULL,
						NULL
				);
				CoTaskMemFree( (LPVOID)(str.pOleStr) );
				break;
			case STRRET_CSTR:
				lstrcpyn( szName, str.cStr, MAX_PATH );
				break;
			default:
				lstrcpyn(
					szName,
					(LPTSTR)pidlItem + str.uOffset,
					MAX_PATH);
				break;
		}
		lstrcpy( szBuffer, szName );

		hr = pTarget->GetDisplayNameOf( pidlItem, SHGDN_FORPARSING, &str );
		if( FAILED( hr ) ) {
			continue;
		}
 
		switch( str.uType ) {
			case STRRET_WSTR:
				WideCharToMultiByte( CP_ACP,
						0,
						str.pOleStr,
						-1,
						szName,
						MAX_PATH,
						NULL,
						NULL
				);
				CoTaskMemFree( (LPVOID)(str.pOleStr) );
				break;
			case STRRET_CSTR:
				lstrcpyn( szName, str.cStr, MAX_PATH );
				break;
			default:
				lstrcpyn(
					szName,
					(LPTSTR)pidlItem + str.uOffset,
					MAX_PATH);
				break;
		}

		wsprintf( szBuffer+lstrlen(szBuffer), "\t%s", szName );
		LboxListInsert( hList, nIndex, szBuffer );
		nIndex++;

	}

	pTarget->Release();
	pEnum->Release();
	pDesktop->Release();
	delete [] szBuffer;

}
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ