![]() |
Exe-Datei aus anderem Ordner öffnen
"Hallo Welt",
lange blieb ich nun von Delphi fern und beschäftigte mich mit anderen Dingen, wie Arbeiten und PHP proggen. Nun wollte ich im Internet mal wieder ein Spiel spielen, musste dafür 1000nde Updates und Mods laden, die man alle einzeln über Parameter beim Exe-Start des Hauptspiels aufrufen kann. Mein Rechner ist aber eine lahme Klapperkiste und ich kann nicht alle Mods in einen Ordner packen, sonst fängt er an zu spinnen. Man kann in den Parametern einen oder mehrere Ordner angeben in dem sich Mods befinden. Also hab' ich mir ein Programm geschrieben, das das Spielverzeichnis scannt, die Mods findet und auflistet, so dass ich sie dann bequem per Häkchen-Setzen mit dem Spiel laden kann. Nun das Problem: Mein Programm funktioniert perfekt, aber das Spiel scheint irgendwie Notiz davon zu nehmen, dass es von einem Programm gestartet wird und schmiert ab! Ich hab es mit ShellExecute, mit WinExec probiert und sogar temporäre Bat-Dateien ausspucken lassen, um das Programm zu starten: Es geht nicht. Nur, wenn die Bat-Datei im Spielordner selbst liegt und auch dann muss man sie ja aus dem Ordner heraus öffnen, denn das Spiel schmiert auch ab, wenn ich es mit einer Bat-Datei (kann auch im selben verzeichnis sein) mit einer strikten Pfadangabe öffne. Es funktioniert also nur die relative Pfadangabe! Das Programm kann ich aber leider nicht in meinem Spieleverzeichnis ablegen, weil die Game-Server jenes scannen und viele Admins vermuten dann, ich wäre ein Cheater und schmeißen mich raus. Hier nochmal zusammenfassend... Bat-Datei, mit der es funktioniert: Zitat:
Zitat:
Delphi-Quellcode:
(mit GetRegData hole ich mir die genaue Pfadangabe; IsChecked packt die angewählten Mods dazu)
ShellExecute(Application.Handle,PAnsiChar('open'),PAnsiChar(GetRegData+'\FLASHPOINTRESISTANCE.EXE'),PAnsiChar('-nosplash -nomap' +isChecked),nil,SW_Normal);
Spiel, das auf diese Weise leider nicht funktioniert, aber sehr empfehlenswert ist: "Operation Flashpoint Resistance 1.96" (kam noch 2001 raus) Weiß jemand vielleicht, wie man eine Datei (scheinbar) aus ihrem Ordner heraus startet oder habt ihr vielleicht noch eine andere Idee?! Ich kann mir das ja auch nicht erklären, warum die Hersteller solche Sicherheitsfetischisten sind, aber ich würde mich auf jeden Fall freuen, wenn ihr mir helft und ich noch etwas von meinem Prog und dem Spiel hab'! Grüße Max |
Re: Exe-Datei aus anderem Ordner öffnen
Und wenn du manuell in den Ordner wechselst?
|
Re: Exe-Datei aus anderem Ordner öffnen
gute Idee und so einfach. gestern Nacht war ich viel zu verpennt um darauf zu kommen! Leider weiß ich auch nicht, wie ich das Verzeichnis wechsle, ohne wieder eine Bat-Datei auszuspucken, was ja sehr unschön ist! Wenn du mir das auch noch sagen könntest wäre ich glücklich... :hello:
|
Re: Exe-Datei aus anderem Ordner öffnen
du hast bei Shellexecute einen Parameter der das Arbeitsverzeichnis angibt (der Parameter der bei dir noch nil ist)
|
Re: Exe-Datei aus anderem Ordner öffnen
Zitat:
|
Re: Exe-Datei aus anderem Ordner öffnen
stimmt. auch eine Möglichkeit.
Was mich gerade wieder traurig stimmt ist, dass jemand eine Funktion verwendet von der er wohl gar nicht wirklich die Parameterbedeutung kennt obwohl diese in der Hilfe zu finden ist. Es kann doch nicht so schwer sein sich mal die Hilfe anzuschauen :cry: Mir wäre als Endnutzer mulmig wenn ich ein Programm nutzen soll wo der Programmierer dinge drin verwendet hat ohne die genaue Funktion zu kennen. |
Re: Exe-Datei aus anderem Ordner öffnen
Zitat:
|
Re: Exe-Datei aus anderem Ordner öffnen
Danke erst einmal. Ich werd' gleich mal weiter rumprobieren. @Thornberry: die Funktion kenne ich, aber irgendwie mache ich doch noch etwas falsch:
Delphi-Quellcode:
ShellExecute(Application.Handle,PAnsiChar('f:'),PAnsiChar('cd '+GetRegData),PAnsiChar('FLASHPOINTRESISTANCE.EXE'),PAnsiChar('-nosplash -nomap' +isChecked),SW_Normal);
|
Re: Exe-Datei aus anderem Ordner öffnen
Code:
lpOperation -> 'open'
HINSTANCE ShellExecute(
HWND hwnd, // handle to parent window LPCTSTR lpOperation, // pointer to string that specifies operation to perform LPCTSTR lpFile, // pointer to filename or folder name string LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters LPCTSTR lpDirectory, // pointer to string that specifies default directory INT nShowCmd // whether file is shown when opened ); lpFile -> 'Pfad\DeineExe.exe' lpParameters -> '-p blabb' lpDirectory ->'Pfad zum Verzeichnis von DeineExe.exe' So in der Art (meine Beispieldaten sind natürlich zu ersetzen). |
Re: Exe-Datei aus anderem Ordner öffnen
So, ihr Helden!
Vielen Dank für eure Hilfe. Für alle, die solche Deppen sind wie ich: So sieht das ganze jetzt aus und läuft perfekt:
Delphi-Quellcode:
uses ...ShellAPI;
----------------- ChDir(GetRegData); if ShellExecute(Application.Handle,PAnsiChar('open'),PAnsiChar('FLASHPOINTRESISTANCE.EXE'),PAnsiChar('-nosplash -nomap' +isChecked),nil,SW_ShowNormal)<32 then Mprot.Lines.Add('Error while starting game!') else Mprot.Lines.Add('starting game...'); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr. |
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