Entwickler-Ecke
Dateizugriff - Wie finde ich das Programme Verzeichnis
Popov - Di 15.04.03 17:00
Titel: Wie finde ich das Programme Verzeichnis
Hat jemand etwas Code?
Popov - Di 15.04.03 18:27
Nicht ganz,
Programme Ordner ist kein virtueller Ordner. Deshalb geht das nicht mit der Funktion.
BungeeBug - Di 15.04.03 18:30
Hi,
das Programmverzeichniss von was? Von deinem Programm?
Quelltext
1:
| ExtractFilePath(Applivation.ExeName); |
MfG BungeeBug
UGrohne - Di 15.04.03 18:37
Ne, Bungee, ich glaub er meint der das Verzeichnis Programme.
Hab kurz im WinSDK geschaut, da stehts in der Registry unter
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
Windows\CurrentVersion in ProgramFilesDir.
Und bei mir stimmt das auch.
Gruß
Delete - Di 15.04.03 20:08
SHGetSpecialFolderLocation oder SHGetSpecialFolderLocation.
Popov - Di 15.04.03 20:24
@Luckie
So ist das aber nicht. So weit war ich schon. Ich hab in der ShlObj.pas nach der Konstante für Pogram Folder nachgesehen, aber keine gefunden. Also gehe ich davon aus, daß es keine gibt. Also geht es mit SHGetSpecialFolderLocation nicht.
@UGrohne
Das mit dem Rauslesen aus der Registry ist bekannt (obwohl danke für den Pfad - den hätte ich sonst suchen müssen). Allerdings habe ich gehoft, daß es eine Api-Funktion (oder sonstiges) gibt - so wie für Win-Verzeichnis.
Delete - Di 15.04.03 20:44
Im PSDK bzw. im MSDN stehen sie drin, so wohl die Konstanten, als auch ihre nummerischen Entsprechungen.
CSIDL_PROGRAM_FILES (0x0026)
Das nach dem oder sollte übrigens SHGetSpecialFolderPath heißen.
Delete - Di 15.04.03 20:55
Was ist mit der Versionsangabe
| Zitat: |
CSIDL_PROGRAM_FILES
Version 5.0. Program Files folder. A typical path is C:\Program Files. |
Ich habe den numerischen Wert 0x26 mal ausprobiert, aber unter Win 98 bekam ich kein Ergebnis. :( Ich probier´s nachher noch mal. Vielleicht war´s auch bloß ein Fehler meinerseits.
Delete - Di 15.04.03 20:59
| MathiasSimmack hat folgendes geschrieben: |
Was ist mit der Versionsangabe
|
Na ich denke mal Popov gehört zu der Sorte Programmierer die sich den Rest selbständig erarbeiten können.
Delete - Di 15.04.03 21:16
Ich verstehe nicht, warum bei jeder Anmerkung immer gleich die Fähigkeiten von irgendwem in Frage gestellt wird. Ist das ein allgemeines Phänomen?
Ich habe gesagt, ich hatte bei einem Schnellversuch das Problem, das ich kein Ergebnis bekam. Von Popovs Fähigkeiten war nie die Rede. Ich hielt meinen Hinweis allgemein für wichtig.
Umsonst wird die Versionsangabe ja wohl auch nicht im PSDK stehen.
Delete - Di 15.04.03 21:23
Ich hatte das so verstanden als hättest du angemeckert, dass ich die Versionsangabe unterschlagen hätte.
Raphael O. - Di 15.04.03 21:27
| Luckie hat folgendes geschrieben: |
| zu der Sorte Programmierer die sich den Rest selbständig erarbeiten können. |
wenn sich dann aber doch mal irgendwer in die Suchfkt. verirrt haben sollte, der es "nicht rausfinden kann"?
Popov - Di 15.04.03 21:30
Ich hab CSIDL_PROGRAM_FILES unter D3 und D6 ausprobiert. Beide male funtionierte es nicht.
Ich glaube dir aber, daß es in der PSDK steht, aber anscheinend weiß Borland noch nichts davon. Ich hab übrigens auch den Wert 26 ausprobiert (in D6). Hat auch nicht funktioniert. Zu Sicherheit hab ich alle Numern ausprobiert:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to $FFFF do if Trim(GetSpecialFolder(i)) <> '' then ListBox1.Items.Add(GetSpecialFolder(i)); end; |
Auch kein Programme Pad.
Delete - Di 15.04.03 21:31
Wer als ernsthafter Windows-Programmierer das MSDN oder PSDK nicht kennt, sollt was anderes machen.
Popov - Di 15.04.03 21:35
Übrigens, was ist mit der Version 5 gemeint. Stehen da die Delphi Versionsnummern drinn oder die von Windows? Welche Version hat Windows98Se? Müßte doch Version 5 sein, oder? Oder doch nur 4.98?
Popov - Di 15.04.03 21:38
| Luckie hat folgendes geschrieben: |
| Wer als ernsthafter Windows-Programmierer das MSDN oder PSDK nicht kennt, sollt was anderes machen. |
Das Problem ist nicht MSDN oder PSDK, das Problem ist wie gut man technisches Englisch kann.
Delete - Di 15.04.03 21:40
Also das geht: (Windows2000, D6 Personal)
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:
| uses ShlObj;
const CSIDL_PROGRAM_FILES = $26;
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); SHGetPathFromIDList(pidl, PChar(FolderPath)); SetLength(FolderPath, strlen(PChar(FolderPath))); end; Result:= FolderPath; end;
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(GetShellFolder(CSIDL_PROGRAM_FILES)); end; |
Delete - Di 15.04.03 21:52
@Popov: Mit der Versionsnummer ist meist eine Bibliothek gemeint. In dem Fall wohl die "shell32.dll". Und die hat bei Win98 meist 4.xx. Bei Luckie geht es, weil dort die DLL Version 5.0 ist. :) Die Lösung ist daher nur bedingt tauglich.
Als anderes Beispiel seien die erweiterten Möglichkeiten der List-View unter Windows XP genannt. Dass eine sortierte Spalte im Reportmodus grau hinterlegt werden kann, ist bspw. recht nützlich. Es funktioniert aber auch nur unter XP. Willst du etwas ähnliches unter Win 2000, dann musst du eine OS-abhängige "OnDraw"-Funktion schreiben.
Zurück zum Thema -
Für eine universelle Funktion müsstest du, Popov, also die DLL laden und ihre Versionsnummer prüfen. (Das geht übrigens einfacher als gedacht, weil Microsoft-DLLs meist eine eingebaute Funktion haben, die diese Nummer zurückliefert. Wer das TNA-Beispiel aus den Win32-API-Tutorials kennt, weiß wovon ich rede ... :wink:) Im Fall der Version 5.x oder höher kannst du SHGetSpecialFolderPath o.ä. benutzen. Andernfalls müsstest du den Wert selbst aus der Registry lesen.
Gruß.
Popov - Di 15.04.03 22:07
Die Möglichkeit die Version einer Dll rauslesen kenne ich. Bei der Shell32.dll (bei mir) ist es die 4.75.
Ich werde den Pfad aus der Registry auslesen. Ich dachte, daß es einfachre bzw. kurzer geht, aber es ist auch kein Problem.
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!