Шаг 69 - lpEnum->Next и типы объектов

С помощью этого метода мы можем двигаться по перечислителю хранилища.

ULONG uCount;
STATSTG stat;
while (lpEnum->Next(1,&stat,&uCount)==S_OK)
{
	cout << (LPSTR)stat.pwcsName << endl;
}
lpEnum->Release();

Информацию о типе объекта мы получаем в структуре STATSTG. В этой структуре есть поле type, с помощью которого мы можем определить тип объекта:

if (lpEnum!=NULL)
{
	cout << "Ok enum" << endl;
	ULONG uCount;
	STATSTG stat;

	while (lpEnum->Next(1,&stat,&uCount)==S_OK)
	{
		cout << (LPSTR)stat.pwcsName << endl;
		switch(stat.type)
		{
		case STGTY_STORAGE:
			cout << "Storage" << endl;
			break;
		case STGTY_STREAM:	
			cout << "Stream" << endl;
			break;
		case STGTY_LOCKBYTES:	
			cout << "LockBytes" << endl;
			break;
		case STGTY_PROPERTY:
			cout << "Property" << endl;
			break;
		default:
			cout << "Unknown type" << endl;
		}
	}
	lpEnum->Release(); 
}

pwcsName хранит название объекта. Вот теперь мы эти знания и применим к изучению имен в хранилище.

while (lpEnum->Next(1,&stat,&uCount)==S_OK)
{
	char buffer[100];
	wcstombs((CHAR*)&buffer,stat.pwcsName,sizeof(buffer)); 
	cout << buffer << endl;
}
Вот результат.
Ok open
Ok enum
1Table
Macros
 CompObj
ObjectPool
WordDocument
 SummaryInformation
 DocumentSummaryInformation
Press any key to continue

Вполне читаемо. А вот результат иследования Excel:

Ok open
Ok enum
Workbook
 SummaryInformation
 DocumentSummaryInformation
Press any key to continue

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.