Delphi-PRAXiS
Seite 7 von 9   « Erste     567 89      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Neuer Artikel bei mir: %HOMEDIR% - das unbekannte Verzeichni (https://www.delphipraxis.net/53783-neuer-artikel-bei-mir-homedir-das-unbekannte-verzeichni.html)

sakura 28. Sep 2005 08:02

Re: Neuer Artikel bei mir: %HOMEDIR% - das unbekannte Verzei
 
Zitat:

Zitat von leddl
Darf ich mal kurz anmerken, daß das DP-eigene SwapIt! ebenfalls versucht, das Ergebnis im Programmverzeichnis zu speichern? Zudem legt es genau das Verhalten an den Tag, das Luckie bemängelt hat und läßt sich nur über den Taskmanagager abschießen, wenn man keine Schreibrechte hat :stupid: Soviel nochmal dazu :mrgreen:

Nun ja :angel: Nichts ist perfekt, oder :zwinker:

...:cat:...

mschaefer 28. Sep 2005 09:11

Re: Neuer Artikel bei mir: %HOMEDIR% - das unbekannte Verzei
 
Moin, moin,

das kann man nur mit einem Lächeln kommentieren:

Wer auf dem eigenen Rechner mit SwapIT keine Schreibrechte hat, der sollte sich mal gedanken darüber machen,
über was er überhaupt noch etwas zu sagen hat. Ja, für die Kandiaten gilt: Schweigen ist Gold.

:mrgreen: // Martin

leddl 28. Sep 2005 09:21

Re: Neuer Artikel bei mir: %HOMEDIR% - das unbekannte Verzei
 
Zitat:

Zitat von mschaefer
Moin, moin,

das kann man nur mit einem Lächeln kommentieren:

Wer auf dem eigenen Rechner mit SwapIT keine Schreibrechte hat, der sollte sich mal gedanken darüber machen,
über was er überhaupt noch etwas zu sagen hat. Ja, für die Kandiaten gilt: Schweigen ist Gold.

:mrgreen: // Martin

:gruebel: Muß man das kommentieren? Wurde bereits alles diskutiert. Und schließlich muß es sich auch nicht immer um den eigenen Rechner handeln :roll:

Jens Schumann 28. Sep 2005 09:27

Re: Neuer Artikel bei mir: %HOMEDIR% - das unbekannte Verzei
 
Hallo Luckie,
über diese Diskussion bin ich hier hergekommen.
Bei der function GetShellFolder ist mir folgendes aufgefallen:
Delphi-Quellcode:
function GetShellFolder(CSIDL: integer): string;
var
  pidl                  : PItemIdList;
  FolderPath            : string;
  SystemFolder          : Integer;
begin
  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; // <- Welchen Wert hat FolderPath wenn
                        // SUCCEEDED einen Fehler zurückgibt ???

  // Hier wird pidl nicht freigeben -> Funktion erzeugt Speicherleck

end;
Zitat:

Zitat von MSDN
ppidl
[out] A pointer to an item identifier list (PIDL) specifying the folder's location relative to the root of the namespace (the desktop). The calling application is responsible for freeing this pointer with the Shell's IMalloc interface (see SHGetMalloc).

Etwas besser wäre es so:
Delphi-Quellcode:
function GetShellFolder(CSIDL: integer): string;
var
  pidl                  : PItemIdList;
  FolderPath            : string;
  SystemFolder          : Integer;
  Malloc                : IMalloc; // Interface für IMalloc
begin
  Malloc:=Nil;
  FolderPath:=''; // Initialisieren damit Result immer definiert ist
  SHGetMalloc(Malloc); // Interface holen damit am Ende pidl freigegeben werden kann
  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); // Speicher freigeben
    end;
end;
Ich schreibe Artikel oder Tutorials wenn 100%tig weiss was ich schreibe. Deshalb habe ich noch nie einen Artikel oder ein Tutorial geschrieben.

Luckie 28. Sep 2005 10:46

Re: Neuer Artikel bei mir: %HOMEDIR% - das unbekannte Verzei
 
Oh besten Dank, ist mir irgendwie immer entgangen.

Thanatos81 4. Nov 2005 23:45

Re: Neuer Artikel bei mir: %HOMEDIR% - das unbekannte Verzei
 
Hi Luckie,

hab gerade ein kleines Tool geschrieben und konnte deine Funktion dabei gut gebrauchen. Beim erneuten Lesen deines Artikels ist mir ein Verbesserungsvorschlag gekommen, verlinke doch auf die MSDN und zwar auf "Shell Constants, Enumerations, and Flags".

Da findet der Leser gleich eine Liste der CSIDLs und kann sich die raussuchen die er benötigt.

Schönen Gruß,

Nicolai1234 16. Aug 2006 00:34

Re: Neuer Artikel bei mir: %HOMEDIR% - das unbekannte Verzei
 
@Luckie
Jetzt wollte ich mal einen deiner Artikel verlinken (hier) und dann ist der einfach weg :cry:
Bei den anderen Artikeln auf deiner Seite hat sich ja das Design ein bisschen verändert, aber diesen hier kann ich nirgends mehr finden.
Wäre schön, wenn du den wieder herstellen könntest :)

Luckie 16. Aug 2006 08:58

Re: Neuer Artikel bei mir: %HOMEDIR% - das unbekannte Verzei
 
Da ist er doch: http://www.michael-puff.de/Developer.../HOMEDIR.shtml

Go2EITS 14. Sep 2006 19:14

Re: Neuer Artikel bei mir: %HOMEDIR% - das unbekannte Verzei
 
Ich hätte zwei Vorschläge zu:
http://www.michael-puff.de/Developer.../HOMEDIR.shtml

a) ein Aufrufbeispiel wäre schön
und
b) die Konstantenliste und die Pfade, die man dazu bekommt.

Hier die KonstantenListe:
Delphi-Quellcode:
  CSIDL_DESKTOP                      = $0000;
  CSIDL_INTERNET                     = $0001;
  CSIDL_PROGRAMS                     = $0002;
  CSIDL_CONTROLS                     = $0003;
  CSIDL_PRINTERS                     = $0004;
  CSIDL_PERSONAL                     = $0005;
  CSIDL_FAVORITES                    = $0006;
  CSIDL_STARTUP                      = $0007;
  CSIDL_RECENT                       = $0008;
  CSIDL_SENDTO                       = $0009;
  CSIDL_BITBUCKET                    = $000a;
  CSIDL_STARTMENU                    = $000b;
  CSIDL_DESKTOPDIRECTORY             = $0010;
  CSIDL_DRIVES                       = $0011;
  CSIDL_NETWORK                      = $0012;
  CSIDL_NETHOOD                      = $0013;
  CSIDL_FONTS                        = $0014;
  CSIDL_TEMPLATES                    = $0015;
  CSIDL_COMMON_STARTMENU             = $0016;
  CSIDL_COMMON_PROGRAMS              = $0017;
  CSIDL_COMMON_STARTUP               = $0018;
  CSIDL_COMMON_DESKTOPDIRECTORY      = $0019;
  CSIDL_APPDATA                      = $001a;
  CSIDL_PRINTHOOD                    = $001b;
  CSIDL_ALTSTARTUP               = $001d;        // DBCS
  CSIDL_COMMON_ALTSTARTUP        = $001e;        // DBCS
  CSIDL_COMMON_FAVORITES         = $001f;
  CSIDL_INTERNET_CACHE           = $0020;
  CSIDL_COOKIES                  = $0021;
  CSIDL_HISTORY                  = $0022;
Zugegeben: Eigentlich sind die Bezeichnungen schon aussagekräftig genug.

Damit erübrigen sich dann einige Fragen in der DP sehr schnell.
Mit besten Grüßen
Go2EITS

negaH 14. Sep 2006 20:12

Re: Neuer Artikel bei mir: %HOMEDIR% - das unbekannte Verzei
 
Zitat:

Nun, Martin redet von Programmen, die sich ausschließlich in ihrem eigenen Ordner abspielen und da muss ich auch sagen, dass dies absolut praktisch ist. Es gibt nur ein Verzeichnis, welches es bei Bedarf zu packen/löschen/verschieben/kopieren gilt.

Beide Positionen haben etwas für sich - aus pragmatischer Sicht sehe ich dies ebenso wie Martin.
Dem kann ich nur zustimmen. Viel schlimmer noch:

1.) was wenn die Software selber die Benutzer verwalten muß und dazu in einer einzigsten Datei deren Passwörter etc. abspeichern möchte. Diese Datei kann man nicht für jeden Benutzer duplizieren da die Software Zugriff auf diese Einstelungen für alle Benutzer gmeinesam haben muß

2.) was ist wenn man die Software in einem Netzwerk installiert, aus administrativen Gründen der Fernwartung

3.) was ist wenn man die Software durch kopieren des Ordners packen, installieren, backupen will ? Muß man sich dann diese Benutzereinstelungen alle wieder verteilt auf den Rechnern zusammensuchen ?

4.) was ist wenn die Software Benutzerabhängig aber Computer-Unabhngig in einer Netzwerkinstalation arbeiten soll ? Dh. egal an welchem Rechner sich der Benutzer anmeldet wer findet immer seine individuellen Einstellungen vor.

5.) was ist wenn diese Konfigurationsdaten durch die eigene Sofware verändert werden müssen, aber Benutzer-Unabhängig weil es keine Benutzerdaten sind sondern global gültige Einstellungen ?

Ja, man könnte jetzt sagen dann installiere deine Netzwerk-Domäne richtig, was dann zwangsläufig einen Windows Server vorraussetzt. Funktioniert bei einfachen Netzwerken als Fileserver eben nicht mehr. Und wir haben wiederum das Problem das die Benutzereinstellungen auf dem Lokalen Computer gespeichert werden.

Ich preferiere immer noch das Speichern der Daten relativ zum Programpfad, wenn die Software eine eigene Userverwaltung benutzt oder eben gobale für alle Benutzer gültige Einstellungen speichern möchte.

Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:32 Uhr.
Seite 7 von 9   « Erste     567 89      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz