Seite 1 von 1
GetDesktopPath()
Verfasst: 25.04.2005 22:36
von hardfalcon
Hier ist der Code, basiert auf GPIs Code vom System-Include von jaPBe:
Code: Alles auswählen
;Many thx to ts-soft for debugging!
Procedure.s GetDesktopPath()
DesktopPath$ = Space (#MAX_PATH+1)
If 0 = SHGetSpecialFolderLocation_(0,0, @*folderid)
If 1 = SHGetPathFromIDList_(*folderid, @DesktopPath$)
If Right(DesktopPath$,1) <> "\"
DesktopPath$ + "\"
EndIf
EndIf
EndIf
ProcedureReturn DesktopPath$
EndProcedure
Debug GetDesktopPath()
//EDIT: Verbessert: Wenn DesktopPath$ nicht kein "\" als letztes Zeichen hat, wird ein "\" angefügt.
//EDIT2: Wieder verbessert, siehe andere Postings
Verfasst: 25.04.2005 23:39
von ts-soft
@hardfalcon
Du solltest den Code vielleicht mal vorher testen
Code: Alles auswählen
Procedure.s GetDesktopPath()
DesktopPath$ = Space (#MAX_PATH+1)
If SHGetSpecialFolderLocation_ (0,0, @folderid) = #NOERROR
If SHGetPathFromIDList_ (folderid, @DesktopPath$) = #False
ProcedureReturn ""
EndIf
Else
ProcedureReturn ""
EndIf
If Right(DesktopPath$,1) <> "\" : DesktopPath$ + "\" : EndIf
CoTaskMemFree_(folderid)
ProcedureReturn DesktopPath$
EndProcedure
Debug GetDesktopPath()
Gruß
Thomas
Verfasst: 26.04.2005 14:05
von hardfalcon
Welche Vorteile hat denn dein Code, ts-soft? Ich habe die Proc bei mir auch getestet, da ging sie einwandfrei. (Windows XP Professional 32bit)
Verfasst: 26.04.2005 14:52
von ts-soft
hardfalcon hat geschrieben:Welche Vorteile hat denn dein Code, ts-soft? Ich habe die Proc bei mir auch getestet, da ging sie einwandfrei. (Windows XP Professional 32bit)
Erstens ist die Procedure nicht so deklariert, das sie einen String zurückliefern kann
Zweitens funktioniert sie bei mir garnicht. Es wurde ein Problem festgestellt
Drittens fehlen sämtliche erforderlichen Überprüfungen
Viertens fehlt die bei GPI's Include enthaltene deklarierte Strukture, dann würde es ja vielleicht gehen:
Code: Alles auswählen
Structure EMID
cb.b
abID.b[1]
EndStructure
Structure ITEMIDLIST
mkid.EMID
EndStructure
Sowas gehört so hier nicht rein
Gruß
Thomas
Verfasst: 26.04.2005 15:01
von hardfalcon
Die einzige Ursache dafür, dass sie nicht funktioniert, wäre IMHO eine Userlib, die einen Befehl namens "GetDesktopPath()" bereitstellt. Und weshalb sollte meine Procso deklariert sein, dass sie keinen String zurückliefern KANN?! Bei mir geht es, und hier ist nochmal mein Code:
[c]
Procedure GetDesktopPath()
DesktopPath$ = Space (#MAX_PATH+1)
SHGetSpecialFolderLocation_ (0,0, @*folderid)
SHGetPathFromIDList_ (*folderid, @DesktopPath$)
If "\" <> Right(DesktopPath$,1)
DesktopPath$ + "\"
EndIf
ProcedureReturn DesktopPath$
EndProcedure
[/c]
Und die Überprüfungen habe ich weggelassen, weil sie hier IMHO einfach keinen Sinn haben. Wenn du mir aber Sinn/Zweck/Funktion dieser Überprüfungen erklärst, werde ich sie natürlich sofort (wieder) einbauen.
//EDIT: "Schreien" entfernt (->nächster Post)
Verfasst: 26.04.2005 15:14
von ts-soft
(Bemerkung entfernt)
Eine Procedure so deklariert liefert immer einen Long
Eine Procedure.s oder Procedure$ liefert einen String
Deine Procedure liefert also nur eine Long
Verfasst: 26.04.2005 15:18
von hardfalcon
Achso, entschuldigung, da hab ich mich wohlmal wieder geirrt und bin ins Fettnäpfchen getreten...
Werde das ganze sofort korrigieren... Aber das mit den Überprüfungen versteh ich nach wie vor nicht...
Verfasst: 26.04.2005 15:19
von ts-soft
Code: Alles auswählen
Procedure.s GetDesktopPath()
DesktopPath$ = Space (#MAX_PATH+1)
SHGetSpecialFolderLocation_ (0,0, @*folderid)
SHGetPathFromIDList_ (*folderid, @DesktopPath$)
; If "\" <> Right(DesktopPath$,1)
; DesktopPath$ + "\"
; EndIf
If Right(DesktopPath$,1) <> "\"
DesktopPath$ + "\"
EndIf
ProcedureReturn DesktopPath$
EndProcedure
Debug GetDesktopPath()
So funktioniert Deine Procedure schon mal
Nachtrag:
>> Aber das mit den Überprüfungen versteh ich nach wie vor nicht...
Man sollte
immer alle Ergebnisse von Funktionen überprüfen, wenn man die Möglichkeit dazu hat, um Fehler zu vermeiden.
Verfasst: 26.04.2005 15:25
von hardfalcon
OK, danke! Werde ich also auch noch verbessern.