Autor Beitrag
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Di 15.04.03 17:00 
Hat jemand etwas Code?

_________________
Popov
opfer.der.genauigkeit
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754
Erhaltene Danke: 1



BeitragVerfasst: Di 15.04.03 17:07 
Hoi,

Also es gibt n Tutorial in diesem Forum.
www.delphi-forum.de/viewtopic.php?t=9428

Ich hoffe das hilft.

_________________
Stellen Sie sich bitte Zirkusmusik vor.
Popov Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Di 15.04.03 18:27 
Nicht ganz,

Programme Ordner ist kein virtueller Ordner. Deshalb geht das nicht mit der Funktion.

_________________
Popov
BungeeBug
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 901



BeitragVerfasst: Di 15.04.03 18:30 
Hi,
das Programmverzeichniss von was? Von deinem Programm?
ausblenden Quelltext
1:
ExtractFilePath(Applivation.ExeName);					


MfG BungeeBug
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: 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ß
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 15.04.03 20:08 
SHGetSpecialFolderLocation oder SHGetSpecialFolderLocation.
Popov Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: 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.

_________________
Popov
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: 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:

ausblenden 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.

_________________
Popov
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 15.04.03 21:31 
Wer als ernsthafter Windows-Programmierer das MSDN oder PSDK nicht kennt, sollt was anderes machen.
Popov Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: 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
Popov Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: 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.

_________________
Popov
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 15.04.03 21:40 
Also das geht: (Windows2000, D6 Personal)
ausblenden 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;
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: 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.

_________________
Popov