Autor |
Beitrag |
MephistoFFF
      
Beiträge: 60
Win 7
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mi 09.07.08 20:54
Hallo und  im Delphi-Forum, MephistoFFF!
Wenn sich das Spiel in der Windows-Software registriert, dann könntest du es unter folgendem Registrierungspfad finden:
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 
      
Beiträge: 60
Win 7
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mi 09.07.08 21:07
Ach so, dann hab ich dich wohl falsch verstanden.
So kannst du den Pfad des Speicherdialogs setzen:
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 
      
Beiträge: 60
Win 7
|
Verfasst: 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
      
Beiträge: 193
Erhaltene Danke: 1
Win XP, Win 7, BS2000
D5
|
Verfasst: Mi 09.07.08 21:24
Hi Mephisto,
ich glaube was Du suchst ist:
Delphi-Quelltext 1:
| AppDir := ExtractFilePath(ParamStr(0)); |
bye
bflegel
_________________ I know all the jokes about my name
|
|
MephistoFFF 
      
Beiträge: 60
Win 7
|
Verfasst: 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
      
Beiträge: 193
Erhaltene Danke: 1
Win XP, Win 7, BS2000
D5
|
Verfasst: 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mi 09.07.08 21:36
Sollten die Reg-Einträge immer gleich sein, probier das einfach mal aus.
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 
      
Beiträge: 60
Win 7
|
Verfasst: Mi 09.07.08 21:42
Danke, aber bei TRegistry, RootKey, OpenKey, ReadString, und Free sagt er mir: "nicht deklarierter bezeichner"
mfG
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mi 09.07.08 21:43
Du solltest zum Verwenden der Registry noch die zugehörige Unit Registry einbinden.
Marc.: Außerdem spuckt er noch aus: "Variable 'Registry' wurde deklariert, aber in 'GetCSFolder' nicht verwendet" 
|
|
MephistoFFF 
      
Beiträge: 60
Win 7
|
Verfasst: Mi 09.07.08 21:46
ganz dumme frage, wie mach ich das?
wie gesagt, es tut mir leid, 'bin blutiger anfänger^^
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mi 09.07.08 21:47
Einfach die Unit bei Uses einreihen.
Ich empfehle Dir aber zusätzlich den Crashkurs Delphi von unserem Christian S. anzuschauen.
@ Yogu:Stimmt, hatte zuvor das ganze nicht mit einem with do-Block gelöst gehabt. Ist geändert.
cu
Marc
|
|
MephistoFFF 
      
Beiträge: 60
Win 7
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mi 09.07.08 22:01
MephistoFFF 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:
Delphi-Quelltext 1:
| SaveDialog.InitialDir := GetCSFolder; |
Aber ich denke auch, dass der Crashkurs genau das richtige für dich wäre.
|
|
MephistoFFF 
      
Beiträge: 60
Win 7
|
Verfasst: 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mi 09.07.08 22:20
Dann musst Du den Pfad entsprechend anpassen:
Delphi-Quelltext 1: 2: 3: 4: 5:
| if OpenKey(KEY,False) then begin Result := ReadString(VALUE); Delete(Result,length(Result) - 8, 9); Result := Result + 'counter-strike'; end |
Du könntest das Ergebnis sicherheitshalber noch mit
if DirectoryExists(getcsfolder) then ...
zusätzlich überpüfen.
€: Es gibt noch einen Pfad:
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 
      
Beiträge: 60
Win 7
|
Verfasst: 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:
Delphi-Quelltext 1: 2: 3:
| Result := ReadString(VALUE); Delete(Result,length(Result) - 9, 10); 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mi 09.07.08 23:14
MephistoFFF 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!
MephistoFFF hat folgendes geschrieben: |
edit2: auf einmal gehts doch... Danke jungs^^
|
Bitte, bitte.
cu
Marc.
|
|
MephistoFFF 
      
Beiträge: 60
Win 7
|
Verfasst: 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
|
|