000
13.04.2008, 19:22 Uhr
~korig
Gast
|
hallo,
ich habe mir eine Funktion geschrieben, die mir den Titeltext einer Datei neu setzt (das ist die Information die man sieht, wenn man im Explorer die Spalte "Titel" aktiviert und das dokument einen solchen text hat)
Solch ein Text ist in der Regel nur bei Office-Dokumenten,sprich Word, Excel usw vorhanden. Soweit funktioniert das ganze auch, ich kann den Text setzen und krieg ihn auch im Browser angezeigt.
Öffne ich aber jetzt das (Word-)dokument mit Word und wähle über Datei->Eigenschaften die Funktion aus um über Word den Titel des Dokumentes (neu) zu setzen bzw. zu editieren, steht dort komischerweise nur der erste Buchstabe, des von mir gesetzten Textes.
Hat jemand eine Idee woran das liegen könnte?(Im Explorer steht er komplett und richtig drin)
Wäre wirklich für einen tipp oder sonstiges Dankbar, auch wenns nur eine weiterempfehlung an ein anderes Forum ist, da ich an dem Problem jetzt schon sehr lange hänge bin ich wirklich für jede Information oder ähnlich dankbar die hilfreich sein kann das Problem zu lösen.
Hier mal der Code mit dem ich den Titeltext setze:
C++: |
bool FileManager::setNewTitelOfFile(std::wstring path, std::wstring titel) { FMTID PropSetfmtid={0xf29f85e0,0x4ff9,0x1068,{0xab, 0x91, 0x08, 0x00, 0x2b, 0x27, 0xb3, 0xd9 }}; HRESULT hr = S_OK; IPropertyStorage *pPropStg = NULL; IPropertySetStorage *pPropSetStg = NULL; PROPSPEC propspec; PROPVARIANT propWrite;
hr = StgOpenStorageEx( path.c_str(), STGM_DIRECT | STGM_READWRITE | STGM_SHARE_EXCLUSIVE, STGFMT_ANY, 0, NULL, NULL, IID_IPropertySetStorage, reinterpret_cast<void**>(&pPropSetStg) );
if (hr == S_OK) { hr = pPropSetStg->Create(PropSetfmtid, NULL, PROPSETFLAG_DEFAULT, STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE, &pPropStg);
if (hr == S_OK) { propspec.ulKind = PRSPEC_PROPID; propspec.propid = 0x00000002;
//String umsetzen in TCHAR TCHAR titelAsTCHAR[1024]={0}; StringCbPrintf(titelAsTCHAR, 1024, L"%s", titel.c_str()); //von TCHAR nach char char titelAsChar[1024] = {0};
WideCharToMultiByte(CP_ACP, NULL, titelAsTCHAR, static_cast<int>(titel.length()), titelAsChar, static_cast<int>(titel.length()), NULL, NULL);
propWrite.pszVal = titelAsChar; propWrite.vt = VT_LPSTR; hr = pPropStg->WriteMultiple(1, &propspec, &propWrite, PID_FIRST_USABLE);
if (hr == S_OK) { pPropSetStg->Release(); pPropStg->Release(); return true; } } else { pPropSetStg->Release(); pPropStg->Release(); } }
return false;
|
|