AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringToKnownFolder gesucht

Ein Thema von blablab · begonnen am 1. Aug 2012 · letzter Beitrag vom 10. Jan 2013
Antwort Antwort
Seite 1 von 2  1 2      
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

StringToKnownFolder gesucht

  Alt 1. Aug 2012, 03:48
Hallo!

Ich würde gerne einen String in den entsprechenden Windows-Pfad verwandeln. Also wenn der Benutzer zum Beispiel SendTo angibt hätte ich gerne als ergebnis den SendTo Pfad "C:\Documents and Settings\username\SendTo" (oder wie auch immer der Pfad auf dem aktuellen System heißt).
Das ganze soll dann für möglichst viele Strings funktionieren wie zb SendTo, StartMenu, MyDocuments/Music/Pictures, Desktop, ...
Wie genau diese Strings definiert sind ist nicht so wichtig, hauptsache sie sind einigermaßen intuitiv. Ob das jetzt zum Beispiel MyDocuments heißt oder nur Documents ist egal, aber {7B0DB17D-9CD2-4A93-9733-46CC89022E7C} wäre nicht so schön...

Gibt es hierfür eine Windows-Funktion die ich benutzen könnte oder etwas Ähnliches?

Grüße
blablab
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: StringToKnownFolder gesucht

  Alt 1. Aug 2012, 06:35
Delphi-Quellcode:
uses ActiveX, ShlObj;

function GetSpecialFolder(hWindow: HWND; Folder: Integer): String;
var
  pMalloc: IMalloc;
  pidl: PItemIDList;
  Path: PChar;
begin
// Parameter für Folder:
//Const CSIDL_FLAG_CREATE = &H8000   '(Win 2000) Falls das Verzeichnis nicht Eistiert wird es erstellt
//Const CSIDL_FLAG_DONT_VERIFY = &H4000   '(Win 2000) Benutzt den Ordner auch wenn der CSIDL nicht existiert
//Const CSIDL_ADMINTOOLS = &H30   '(Win 2000) Ermittelt das Verzeichnis "Administrations Tools"
//Const CSIDL_ALTSTARTUP = &H1D   'Ermittelt das Verzeichnis "Alternatives Startverzeichnis"
//Const CSIDL_APPDATA = &H1A   'Ermittelt das Verzeichnis "AppData"
//Const CSIDL_BITBUCKET = &HA   'Ermittelt das Verzeichnis "Papierkorb"
//Const CSIDL_COMMON_ADMINTOOLS = &H2F   '(Win 2000) Ermittelt das Verzeichnis "Administartions Tools für alle Benutzer"
//Const CSIDL_COMMON_ALTSTARTUP = &H1D   '(Win 2000) Ermittelt das Verzeichnis "Alternatives Startverzeichnis für alle Benutzer"
//Const CSIDL_COMMON_APPDATA = &H23   '(Win NT/2000) Ermittelt das Verzeichnis "AppData für alle Benutzer"
//Const CSIDL_COMMON_DESKTOPDIRECTORY = &H19   '(Win NT/2000) Ermittelt das Verzeichnis "Desktop für alle Benutzer"
//Const CSIDL_COMMON_DOCUMENTS = &H2E   '(Win NT/2000) Ermittelt das Verzeichnis "Dokumente für alle Benutzer"
//Const CSIDL_COMMON_FAVORITES = &H1F   '(Win NT/2000) Ermittelt das Verzeichnis "Favoriten für alle Benutzer"
//Const CSIDL_COMMON_PROGRAMS = &H17   '(Win NT/2000) Ermittelt das Verzeichnis "Startmenü/Programme für alle Benutzer"
//Const CSIDL_COMMON_STARTMENU = &H16   '(Win NT/2000) Ermittelt das Verzeichnis "Startmenü für alle Benutzer"
//Const CSIDL_COMMON_STARTUP = &H18   '(Win NT/2000) Ermittelt das Verzeichnis "Startmenü/Autostart für alle Benutzer"
//Const CSIDL_COMMON_TEMPLATES = &H2D   '(Win NT/2000) Ermittelt das Verzeichnis "Templates für alle Benutzer"
//Const CSIDL_CONTROLS = &H3   'Ermittelt das Verzeichnis "Systemsteuerung"
//Const CSIDL_COOKIES = &H21   'Ermittelt das Verzeichnis "Cookies"
//Const CSIDL_DESKTOP = &H0   'Ermittelt das Verzeichnis "Desktop"
//Const CSIDL_DESKTOPDIRECTORY = &H10   'Ermittelt das Verzeichnis "Desktop-Verzeichnis"
//Const CSIDL_DRIVES = &H11   'Ermittelt das Verzeichnis "Arbeitsplatz"
//Const CSIDL_FAVORITES = &H6   'Ermittelt das Verzeichnis "Favoriten"
//Const CSIDL_FONTS = &H14   'Ermittelt das Verzeichnis "Fonts"
//Const CSIDL_HISTORY = &H22   'Ermittelt das Verzeichnis "History"
//Const CSIDL_INTERNET = &H1   'Ermittelt das Verzeichnis "Internet"
//Const CSIDL_INTERNET_CACHE = &H20   'Ermittelt das Verzeichnis "Internet Cache"
//Const CSIDL_LOCAL_APPDATA = &H1C   '(nur IE ab Version 5.0) Ermittelt das Verzeichnis "Local AppData"
//Const CSIDL_MYPICTURES = &H27   '(nur IE ab Version 5.0) Ermittelt das Verzeichnis "Eigene Bilder"
//Const CSIDL_NETHOOD = &H13   'Ermittelt das Verzeichnis "Netzwerkumgebung"
//Const CSIDL_NETWORK = &H12   'Ermittelt das Verzeichnis "Gesamtes Netzwerk"
//Const CSIDL_PERSONAL = &H5   'Ermittelt das Verzeichnis "Eigene Dokumente"
//Const CSIDL_PRINTERS = &H4   'Ermittelt das Verzeichnis "Drucker"
//Const CSIDL_PRINTHOOD = &H1B   'Ermittelt das Verzeichnis "Drucker-Verzeichnis"
//Const CSIDL_PROFILE = &H28   '(nur IE ab Version 5.0) Ermittelt das Verzeichnis "Profile"
//Const CSIDL_PROGRAM_FILES = &H26   '(nur IE ab Version 5.0) Ermittelt das Verzeichnis "Programme"
//Const CSIDL_PROGRAM_FILES_COMMON = &H2B   '(Win NT/2000) Ermittelt das Verzeichnis "Programme für alle Benutzer"
//Const CSIDL_PROGRAM_FILES_COMMONX86 = &H2C   '(Win 2000 - x86) Ermittelt das Verzeichnis "Programme für alle Benutzer"
//Const CSIDL_PROGRAM_FILESX86 = &H2A   '(Win 2000 - RISC) Ermittelt das Verzeichnis "Programme für alle Benutzer"
//Const CSIDL_PROGRAMS = &H2   'Ermittelt das Verzeichnis "Startmenü/Programme"
//Const CSIDL_RECENT = &H8   'Ermittelt das Verzeichnis "Startmenü/Dokumente"
//Const CSIDL_SENDTO = &H9   'Ermittelt das Verzeichnis "Senden zu"
//Const CSIDL_STARTMENU = &HB   'Ermittelt das Verzeichnis "Startmenü"
//Const CSIDL_STARTUP = &H7   'Ermittelt das Verzeichnis "Autostart"
//Const CSIDL_SYSTEM = &H25   '(nur IE ab Version 5.0) Ermittelt das Verzeichnis "System"
//Const CSIDL_SYSTEMX86 = &H29   '(Win 2000) Ermittelt das Verzeichnis "Systemx86"
//Const CSIDL_TEMPLATES = &H15   'Ermittelt das Verzeichnis "Templates"

  if (SHGetMalloc(pMalloc) <> S_OK) then
  begin
    MessageBox(hWindow, 'Couldn''t get pointer to IMalloc interface.',
               'SHGetMalloc(pMalloc)', 16);
    Exit;
  end;

  SHGetSpecialFolderLocation(hWindow, Folder, pidl);
  GetMem(Path, MAX_PATH);
  SHGetPathFromIDList(pidl, Path);
  Result := Path;
  FreeMem(Path);

  pMalloc.Free(pidl);
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#3

AW: StringToKnownFolder gesucht

  Alt 1. Aug 2012, 06:39
Meins du SHGetKnownFolderPath und KNOWNFOLDERID?
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: StringToKnownFolder gesucht

  Alt 3. Aug 2012, 07:59
Mein Problem ist eigentlich eher wie ich an die richtige CSIDL komme. ich bräuchte also noch zusätzlich zu Brummis Funktion GetSpecialFolder() die Funktion DescriptionToCSIDL():
Delphi-Quellcode:
function StringToKnownFolder(str: String);
begin
Result := GetSpecialFolder(..., DescriptionToCSIDL(str));
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: StringToKnownFolder gesucht

  Alt 3. Aug 2012, 08:20
Suchst du evtl. sowas SpecialFolders
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#6

AW: StringToKnownFolder gesucht

  Alt 3. Aug 2012, 13:49
Mein Problem ist eigentlich eher wie ich an die richtige CSIDL komme. ich bräuchte also noch zusätzlich zu Brummis Funktion GetSpecialFolder() die Funktion DescriptionToCSIDL():
Delphi-Quellcode:
function StringToKnownFolder(str: String);
begin
Result := GetSpecialFolder(..., DescriptionToCSIDL(str));
end;
Dann bau sie dir doch... Du hast doch schon alles da...
Delphi-Quellcode:
Function DescriptionToCSIDL (aDescription : String) : Word;
Begin
If aDescription = 'Alternatives Startverzeichnisthen
  result := CSIDL_ALTSTARTUP;
If aDescription = 'AppDatathen
  result := CSIDL_APPDATA;
...
End;
Is ne Sache von 2 Minuten.

Geändert von Iwo Asnet ( 3. Aug 2012 um 13:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: StringToKnownFolder gesucht

  Alt 3. Aug 2012, 14:20
Wenn ich Dich richtig verstanden habe willst Du so etwas wie ein Wörterbuch

"Versenden" : CSIDL_SENDTO
"noch zu senden" : CSIDL_SENDTO
"versand" : CSIDL_SENDTO

oder?

@Bummi
Kann es sein, daß in Deinem Beispiel die "eigenen Dateien" fehlen?
CSIDL_Personal übersehen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 ( 3. Aug 2012 um 14:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: StringToKnownFolder gesucht

  Alt 3. Aug 2012, 15:23
@p80286

kann gut sein, ist schon älter ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: StringToKnownFolder gesucht

  Alt 4. Aug 2012, 04:23
Im prinzip läuft es tatsächlich auf so ein "Wörterbuch" hinaus. Ich dachte nur eventuell gibt es da sowas ähnliches schon. Mir gehts eigentlich nur darum, nicht selbst eine unvollständige oder fehlerhafte Funktion zu schreiben, wenn es sowas schon gibt. Ich hätte gedacht, dass Windows sowas anbietet, aber scheinbar bin ich der einzige der sowas braucht Naja, dann schreib ich es halt selbst...

Vielen Dank für aure Antworten!
  Mit Zitat antworten Zitat
terence14
(Gast)

n/a Beiträge
 
#10

AW: StringToKnownFolder gesucht

  Alt 10. Jan 2013, 14:19
Im prinzip läuft es tatsächlich auf so ein "Wörterbuch" hinaus. Ich dachte nur eventuell gibt es da sowas ähnliches schon. Mir gehts eigentlich nur darum, nicht selbst eine unvollständige oder fehlerhafte Funktion zu schreiben, wenn es sowas schon gibt. Ich hätte gedacht, dass Windows sowas anbietet, aber scheinbar bin ich der einzige der sowas braucht Naja, dann schreib ich es halt selbst...

Vielen Dank für aure Antworten!
Vielleicht hast Du die Möglichkeit, Deine Schreibergebnisse
hier reinzustellen. Dann könn(t)en wir alle bei Der Vervollständigung
solch einer Liste helfen.

MfG,
terence
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz