Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Probleme mit GetShellFolder!
SunnyDream - Mo 05.06.06 01:24
Titel: Probleme mit GetShellFolder!
Huhu liebe Community!
Nachdem in meinem Thread
Hier [
http://www.delphi-forum.de/viewtopic.php?t=60985&highlight=] einige neue Fragen zum Thema GEtShellFolder aufgekommen sind, dachte ich, ich mache einen neuen Thread dazu auf.
(Der Übersicht halber)
Mein Problem ist folgendes: Ich will den Temp Ordner des Nutzers feststellen, und verwende dazu die GetShellFolder Funktion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| function GetShellFolder(CSIDL: integer): string; var pidl : PItemIdList; FolderPath : string; SystemFolder : Integer; Malloc : IMalloc; begin Malloc := nil; FolderPath := ''; SHGetMalloc(Malloc); if Malloc = nil then begin Result := FolderPath; Exit; end; try SystemFolder := CSIDL; if SUCCEEDED(SHGetSpecialFolderLocation(0, SystemFolder, pidl)) then begin SetLength(FolderPath, max_path); if SHGetPathFromIDList(pidl, PChar(FolderPath)) then begin SetLength(FolderPath, length(PChar(FolderPath))); end; end; Result := FolderPath; finally Malloc.Free(pidl); end; end;
const CSIDL_APPDATA = $001a; MeinSavePath := GetShellFolder(CSIDL_APPDATA); |
In die Uses habe ich sowohl ShlObj als auch ShellApi geschrieben. Jedoch bringt mir das Programm dann beim Complilieren die Fehlermeldung, dass "IMalloc" ein undefinierter Bezeichner ist... Wie behebe ich dieses Problem?
(Ja die SuFu habe ich benutzt)
Andreas L. - Mo 05.06.06 08:54
Hi,
das da brauchste schonmal nicht.
Delphi-Quelltext
1: 2:
| const CSIDL_APPDATA = $001a; |
So, ist das
MeinSavePath := GetShellFolder(CSIDL_APPDATA); ne globale Variable? Wenn ja, wo genau im Code versuchst du in die Variable zu schreiben?
Achja, CSIDL_APPDATA ist der Anwendungsdaten-Ordner und nicht der Temp-Ordner. Such mal bei MSDN nach der richtigen CSIDL.
Born-to-Frag - Mo 05.06.06 10:37
Bind noch mal ActiveX ein ;)
greetz
SunnyDream - Mo 05.06.06 11:26
Was für ein Active X soll ich denn einbinden?
@OnlineHome: Die MeinSavePath ist eine gloabale Variable die beim auslesen des Paths verwende. Um genau zu sein in einer Onclick Prozedur wird der Path ausgelesen, da ich ihn dort brauche.
Born-to-Frag - Mo 05.06.06 11:30
Wie, was für eins :shock:
In die uses ActiveX mit aufnehmen...
Gausi - Mo 05.06.06 11:31
SunnyDream hat folgendes geschrieben: |
| Was für ein Active X soll ich denn einbinden? |
Ich glaube, er meint
uses ActiveX; Hab ich in der Liste vergessen, sorry ;-)
Edit: Naja, doppelt hält besser :mrgreen:
SunnyDream - Mo 05.06.06 11:43
ENDLICH scheint es zu gehen!
Aber da taucht schon der nächste Fehler auf:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Vorschau1Click(Sender: TObject); begin
MeinSavePath := GetShellFolder(CSIDL_APPDATA); MeinSavePath := MeinSavePath+'temp.html'; ROutPut.PlainText:= true; ROutPut.Lines.SaveToFile('MeinSavePath');
ShellExecute(Handle, 'open', 'iexplore.exe', '"' + MeinSavePath + '"' , 'C:\Programme\Internet Explorer\', SW_SHOWNORMAL); end; |
"Inkompatible Typen "String" und "PAnsiChar"" in Zeile 10...
Born-to-Frag - Mo 05.06.06 11:48
ShellExecute(Handle, 'open', 'iexplore.exe', PChar('"' + MeinSavePath + '"') , 'C:\Programme\Internet Explorer\', SW_SHOWNORMAL);
:mrgreen:
SunnyDream - Mo 05.06.06 11:49
Dank dir, fast schon peinlich wie schlecht ich NOCH bin =(
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!