Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Exe-Datei aus anderem Ordner öffnen (https://www.delphipraxis.net/100177-exe-datei-aus-anderem-ordner-oeffnen.html)

LAWn-M0W3R 24. Sep 2007 03:05


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:

start FLASHPOINTRESISTANCE.EXE -nosplash -nomap -mod=@BWCTI -mod=@CoC -mod=@Sebnam
Bat-Datei, mit der es nicht funktioniert:
Zitat:

start F:\WinProgramme\Gamez\OperationFlashpoint\FLASHPOI NTRESISTANCE.EXE -nosplash -nomap -mod=@BWCTI -mod=@CoC -mod=@Sebnam
Delphi-Code, mit dem es auch nicht klappt:
Delphi-Quellcode:
ShellExecute(Application.Handle,PAnsiChar('open'),PAnsiChar(GetRegData+'\FLASHPOINTRESISTANCE.EXE'),PAnsiChar('-nosplash -nomap' +isChecked),nil,SW_Normal);
(mit GetRegData hole ich mir die genaue Pfadangabe; IsChecked packt die angewählten Mods dazu)

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

mkinzler 24. Sep 2007 05:32

Re: Exe-Datei aus anderem Ordner öffnen
 
Und wenn du manuell in den Ordner wechselst?

LAWn-M0W3R 24. Sep 2007 15:35

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:

SirThornberry 24. Sep 2007 15:37

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)

DeddyH 24. Sep 2007 15:38

Re: Exe-Datei aus anderem Ordner öffnen
 
Zitat:

Zitat von Delphi-Hilfe
Die Prozedur ChDir wechselt das aktuelle Verzeichnis.

Das wäre auch noch eine Möglichkeit.

SirThornberry 24. Sep 2007 15:42

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.

DeddyH 24. Sep 2007 15:47

Re: Exe-Datei aus anderem Ordner öffnen
 
Zitat:

Zitat von SirThornberry
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.

Ich möchte lieber nicht wissen, bei wievielen Programmen das schon bei mir der Fall ist.

LAWn-M0W3R 24. Sep 2007 15:51

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);

DeddyH 24. Sep 2007 15:56

Re: Exe-Datei aus anderem Ordner öffnen
 
Code:
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
   );
lpOperation -> 'open'
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).

LAWn-M0W3R 24. Sep 2007 16:17

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.
Seite 1 von 2  1 2      

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