Autor Beitrag
MephistoFFF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Mi 09.07.08 20:14 
Hi!
Vorerst, ich bin absoluter Neuling in Delphi. Ich hab weiß zwar schon einiges, aber eben noch sehr wenig.

Ich habe ein Tool geschrieben, mit dem ich für ein Spiel eine Config-Datei erstellen kann. Diese kann der Benutzer dann mit Hilfe eines Save-Dialoges speichern.

Nun meine eigentliche Frage: Wie kann ich mit Delphi den Pfad eines Spieles suchen lassen?

Über Hilfe würde ich mich freuen!

mfG
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 09.07.08 20:54 
Hallo und :welcome: im Delphi-Forum, user profile iconMephistoFFF!

Wenn sich das Spiel in der Windows-Software registriert, dann könntest du es unter folgendem Registrierungspfad finden:

ausblenden Quelltext
1:
HKEY_CLASSES_ROOT\Installer\Products\					

Alternativ dazu könntest du auch mit RegEdit nach dem Pfad des Spiels suchen lassen. Wenn du Glück hast, liefert er dir den Schlüssel, indem der Pfad allgemein steht.

Grüße,
Yogu
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Mi 09.07.08 21:03 
Ich hab vielleicht die Frage bisschen undeutlich formuliert.
Ich möchte, dass der Save-Dialog automatisch zum Spiel navigiert, wenn man auf Save klickt ;) .

mfG
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 09.07.08 21:07 
Ach so, dann hab ich dich wohl falsch verstanden. :)

So kannst du den Pfad des Speicherdialogs setzen:

ausblenden Delphi-Quelltext
1:
SaveDialog1.InitialDir := 'C:\Bla\Blubb\';					

Diese Anweisung schreibst du am Besten direkt vor das Execute des Dialogs. Und liege ich richtig in der Annahme, dass du den Pfad des Spiels schon weißt?
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Mi 09.07.08 21:14 
ja, soweit ist mir das ja klar, aber das programm soll ja erstmal den pfad raussuchen, da ja jeder benutzer das spiel, um das es geht, in individuelle ordner installieren kann^^


mfG
bflegel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP, Win 7, BS2000
D5
BeitragVerfasst: Mi 09.07.08 21:24 
Hi Mephisto,

ich glaube was Du suchst ist:
ausblenden Delphi-Quelltext
1:
AppDir := ExtractFilePath(ParamStr(0));					


bye
bflegel

_________________
I know all the jokes about my name
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Mi 09.07.08 21:27 
Sorry, das versteh ich nicht.

Also ganz konkret:
Der "config-maker" is für Counter Strike. Wenn man auf Save klickt, öffnet sich der SaveDialog... und genau dieser soll automatisch zum Counterstrike Ordner navigieren... dazu muss ja vom programm rausgefunden werden, wie genau der pfad von eben dem spiel ist...^^

ich hoffe ihr versteht mich jetzt
bflegel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP, Win 7, BS2000
D5
BeitragVerfasst: Mi 09.07.08 21:32 
Hm - ok.

Meine Lösung sucht den Pfad Deines Programmes aus, nicht das von CS.

Schon mal in der Registry gesucht ob/wo der Pfad gespeichert wird?

_________________
I know all the jokes about my name
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mi 09.07.08 21:36 
Sollten die Reg-Einträge immer gleich sein, probier das einfach mal aus. :zwinker:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function GetCSFolder: string;
  const
    KEY   = 'Software\Valve\Steam';
    VALUE = 'ModInstallPath';
begin
  with TRegistry.Create do
  try
    RootKey := HKEY_CURRENT_USER;

    if OpenKey(KEY,False) then
      Result := ReadString(VALUE)
    else
      Result := 'KEY NOT FOUND';
  finally
    Free;
   end;
end;


cu
Marc


Zuletzt bearbeitet von Marc. am Mi 09.07.08 21:53, insgesamt 1-mal bearbeitet
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Mi 09.07.08 21:42 
Danke, aber bei TRegistry, RootKey, OpenKey, ReadString, und Free sagt er mir: "nicht deklarierter bezeichner"

mfG
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 09.07.08 21:43 
Du solltest zum Verwenden der Registry noch die zugehörige Unit Registry einbinden. :idea:

user profile iconMarc.: Außerdem spuckt er noch aus: "Variable 'Registry' wurde deklariert, aber in 'GetCSFolder' nicht verwendet" ;)
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Mi 09.07.08 21:46 
ganz dumme frage, wie mach ich das?

wie gesagt, es tut mir leid, 'bin blutiger anfänger^^
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mi 09.07.08 21:47 
Einfach die Unit bei Uses einreihen. ;)
Ich empfehle Dir aber zusätzlich den Crashkurs Delphi von unserem user profile iconChristian S. anzuschauen. :)

@ user profile iconYogu:Stimmt, hatte zuvor das ganze nicht mit einem with do-Block gelöst gehabt. Ist geändert. ;)

cu
Marc
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Mi 09.07.08 21:56 
ok, danke....

nächste dumme frage, wie bind ich das ganze jetzt in den save-dialog ein?

saveDialog.InitialDir := ???;

mfG
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mi 09.07.08 22:01 
user profile iconMephistoFFF hat folgendes geschrieben:
wie bind ich das ganze jetzt in den save-dialog ein?

saveDialog.InitialDir := ???;

Der Ansatz ist schon mal richtig.

Die Funktion GetCSFolder liefert als Rückgabewert einen String. Du kannst diesen nutzen wie eine ganz normale Variable. Also so:

ausblenden Delphi-Quelltext
1:
SaveDialog.InitialDir := GetCSFolder;					

Aber ich denke auch, dass der Crashkurs genau das richtige für dich wäre.
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Mi 09.07.08 22:07 
Stimmt, warum ich da nicht drauf gekommen bin...

Crashkurs werde ich mir auf jedenfall ansehen!

Also... zurück zum thema...:

bei SaveDialog.InitialDir := GetCSFolder; bringt er zwar keine fehler, aber der save-dialog bleibt im selben ordner, wo sich mein programm befindet...

Den pfad findet er aber ( mit showmessage anzeigen lassen ) ... allerdings findet er den half-life pfad, und nicht den Counterstrike: Source pfad


mfG
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mi 09.07.08 22:20 
Dann musst Du den Pfad entsprechend anpassen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
    if OpenKey(KEY,False) then begin
      Result := ReadString(VALUE);
      Delete(Result,length(Result) - 89); // alternativ Setlength(Result, length(Result) - 9)  9 entspricht der Länge des Wortes "Halflife"!
      Result := Result + 'counter-strike'// 'counter-strike source'
    end

Du könntest das Ergebnis sicherheitshalber noch mit
if DirectoryExists(getcsfolder) then ...
zusätzlich überpüfen. :)

€: Es gibt noch einen Pfad:
ausblenden Delphi-Quelltext
1:
2:
3:
HKEY_LOCAL_MACHINE
KEY = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 10'
VALUE = 'InstallLocation'

Der Pfad bezieht sich auf CS 1.6. Könnte gut sein, dass sich einem anderen "Steam App"-Ordner der Counter-Strike Source-Pfad befindet. Musst mal schaun. ;)


Zuletzt bearbeitet von Marc. am Mi 09.07.08 22:49, insgesamt 1-mal bearbeitet
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Mi 09.07.08 22:43 
pfad anpassen funktioniert leider nicht, und wie schon gesagt, der savedialog navigiert nicht zum verzeichnis...

der gefundene pfad von getcssfolder endet in "half-life"


edit: also ins richtige verzeichnis geht er jetzt:
ausblenden Delphi-Quelltext
1:
2:
3:
      Result := ReadString(VALUE);
      Delete(Result,length(Result) - 910);
      Result := Result + '\counter-strike source\cstrike\cfg'

aber der savedialog naviigiert immernoch nicht dahin....


edit2: auf einmal gehts doch... Danke jungs^^

mfG


Zuletzt bearbeitet von MephistoFFF am Mi 09.07.08 23:20, insgesamt 1-mal bearbeitet
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mi 09.07.08 23:14 
user profile iconMephistoFFF hat folgendes geschrieben:

edit: also ins richtige verzeichnis geht er jetzt:

Result := ReadString(VALUE);
Delete(Result,length(Result) - 9, 10);
Result := Result + '\counter-strike source\cstrike\cfg'

aber der savedialog naviigiert immernoch nicht dahin....

Da war ein Backslash zuviel. ;)
Benutze bitte in Zukunft die Delphi-Tags [delphi] [/delphi] für deinen Code!


user profile iconMephistoFFF hat folgendes geschrieben:

edit2: auf einmal gehts doch... Danke jungs^^

Bitte, bitte.

cu
Marc.
MephistoFFF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win 7

BeitragVerfasst: Mi 09.07.08 23:19 
Der backslash is schon richtig, da es nicht "halflife" heißt, sonder "half-life" ... und ich deswegen 9 subtrahiere^^

also, danke nochmal

mfG