| |
|
|
Nico Madysa | KompilierenMarkierenSeparieren' gilt ab Windows Vista oder höher
declare Long hShell32, hOle32
proc Init
hOle32 = ImportDLL("OLE32", "ole.")
hShell32 = ImportDLL("SHELL32", "shell.")
ole.CoInitialize(0)
endproc
proc Exit
ole.CoUnInitialize()
FreeDLL hOle32
FreeDLL hShell32
endproc
proc GetCurrentDesktopPath
declare String KnownFoldersID_Desktop, Long pPath, String desktopPath
/* Die KnownFolders IDs stehen (mehr oder weniger in Klartext)
in Microsofts knownfolders.h Headerdatei. Es sind nichts
Anderes als ein Haufen 16 Byte lange Konstanten. Aus
ihnen wiederum können die Pfade der verschiedensten
speziellen Ordner bezogen werden, selbst wenn diese vom
Nutzer verschoben worden sind. */
KnownFoldersID_Desktop = "\x3A\xCC\xBF\xB4\x2C\xDB\x4C\x42\xB0\x29\x7F\xE9\x9A\x87\xC6\x41"
shell.SHGetKnownFolderPath(Addr(KnownFoldersID_Desktop), 0, 0, Addr(pPath))
' Die obige Funktion hat uns die Adresse eines neu
' erzeugten Strings gegeben. Wir basteln daraus
' wieder einen XProfan-String.
desktopPath = StringW$(pPath, 0)
ole.CoTaskMemFree(pPath)
return desktopPath
endproc
cls
Init()
print GetCurrentDesktopPath()
Exit()
waitinput
end
|
|
|
| |
|
|
|
Jörg Sellmeyer | Für welche Windowsversion gilt das? Mit XP bekomme ich eine Fehlermeldung, dass die Funktion shell.SHGetKnownFolderPath unbekannt ist. Außerdem ist die Variable hShell32 nicht deklariert. Dafür wird hUser32 nicht verwendet...
Zumindest unter XP geht es so ganz easy: KompilierenMarkierenSeparieren |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 28.02.2014 ▲ |
|
|
|
|
Nico Madysa | Jörg Sellmeyer (28.02.14)
Für welche Windowsversion gilt das? Mit XP bekomme ich eine Fehlermeldung, dass die Funktion shell.SHGetKnownFolderPath unbekannt ist.
Ab Windows 7 geht's und ich habe keinen Grund anzunehmen, dass es unter Vista nicht klappt. Habe mal "ab Windows Vista" hinzugefügt.
Jörg Sellmeyer (28.02.14)
Außerdem ist die Variable hShell32 nicht deklariert. Dafür wird hUser32 nicht verwendet...
Mein Fehler. Variable war falsch deklariert, hab's korrigiert. War schon spät, als ich damit rumgefummelt hatte.
Jörg Sellmeyer (28.02.14)
Zumindest unter XP geht es so ganz easy:
Bin über diese "Known Folders" Sache in der MSDN gestolpert und es hat den Anschein, dass das die von M$ bevorzugte Methode ist, diese speziellen Pfade abzugreifen.
Ein Blogartikel von 2003 [...] erklärt, dass der "Shell-Folders"-Registry-Schlüssel nur aus Kompatibilitätsgründen mit irgendwelchen obskuren Programmen aus 1994 existiert und nicht mehr verwendet werden sollte. Die Funktion SHGetSpecialFolderLocation , die darin stattdessen vorgeschlagen wird, ist mittlerweile nochmals abgelöst worden, und zwar von SHGetKnownFolderPath [...] , der Funktion, die ich oben verwendet habe.
Wenn ich die Ressourcen zu dem Thema richtig verstanden habe, hat der Registryschlüssel "Shell Folders" unter Windows derzeit etwa den Status, den Add-, Sub- und die anderen veralteten Funktionen in XProfan 10 hatten. Ob du ihn weiter verwendest, ist trotzdem deine Sache. |
|
|
| |
|
|
|
Michael Wodrich | Wahrscheinlich hat jeder Microsoft-Mitarbeiter da seine eigene Routine. Gott sei Dank sind die nicht alle so mitteilsam wie einige wenige ... Da hätte wirklich eine einzige Möglichkeit voll ausgereicht. Jetzt weiß man wieder nicht, welche der vielen Möglichkeiten man nutzen sollte.
Dein Fundstück läuft auf einem Vista Ultimate ganz hervorragend.
Das wäre ja wieder Zündstoff für die Foren: - statt: Welche Programmiersprache ist die beste.... - einfach: Welche SpecialFolder-Routine sollte man bevorzugen....
(Ist euch übrigens schon mal aufgefallen: Diejenigen, die diese Frage stellen tauchen dann in den folgenden 10.000 Postings nicht mehr auf...
Gruß Michael Wodrich |
|
|
| |
|
|
|
Nico Madysa | [OFFTOPIC] Michael Wodrich (28.02.14) (Ist euch übrigens schon mal aufgefallen: Diejenigen, die diese Frage stellen tauchen dann in den folgenden 10.000 Postings nicht mehr auf...
Wahrscheinlich sind das Leute, die einfach nur nach Streit suche. [/OFFTOPIC] |
|
|
| |
|
|