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

  Shell Object

水色 --> オブジェクト
オレンジ --> メソッド




  LboxEnumDesktop



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

	hr = SHGetDesktopFolder( &pDesktop );
	if( FAILED( hr ) ) {
		return;
	}
 
	hr = pDesktop->EnumObjects(
				NULL,
				SHCONTF_FOLDERS | 
				SHCONTF_NONFOLDERS |
				SHCONTF_INCLUDEHIDDEN,
				&pEnum
	);
	if( FAILED( hr ) ) {
		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 = pDesktop->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 = pDesktop->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++;
 
	}

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










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





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

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ