Spiele/.exe'n starten

Xervek

Mitglied
Hallo,

ich wollte mir nen Quicklauncher (oder wie man sowas nennen kann) schreiben. Ich habe also 3 Games installiert, gebe den Pfad zu den jeweiligen .exe'n an und möchte diese dann lediglich per Button starten. Wie man per "Shell ("")" etwas ausführt weiß ich, es funktioniert auch, allerdings nur wenn mein Programm im jeweiligen Ordner des Spiels läuft.

Ein Beispiel für einen "Launch-Button" habe ich hier:

Code:
Private Sub cmd_launch_Click()
Shell ("G:/Wolfenstein - Enemy Territory/ET.exe")
End Sub

Der Pfad ist also KOMPLETT angegeben. In diesem Fall handelt es sich um das Game Enemy Territory. Auch wenn ich statt "/", "\" benutze will es nur dann funktionieren, wenn das Programm im jeweiligen Ordner ist.

Angenommen ich habe ET auf Partition G installiert, will allerdings mein Programm von Partition C starten, geht die Console von ET auf und folgende Fehlermeldung erscheint:

----- FS_Startup -----
Current search path:
C:\/etmain

----------------------
0 files in pk3 files
----- CL_Shutdown -----
-----------------------
Couldn't load default.cfg - I am missing essential files - verify your installation?


Es scheint also irgendeinen Konflikt zu geben, da ich MEIN Programm auf Laufwerk C habe, ich verstehe bloß nicht so ganz wieso?

Hat da jemand eine Ahnung wie ich sowas umgehen kann, dass er also den gesamten Ordner läd und nicht irgendwo auf C zugreifen will?

Vielen Dank schonmal!


Edit:

Ich habe das jetzt noch mal mit einem von mir selbst geschriebenen Programm versucht es darüber zu laden... also es werden in meinem Programm Dateien angelegt und sollten diese nicht vorhanden sein, meckert er. Er hat also gemeckert und die benötigten Dateien angelegt und zwar genau DA, wo die .exe Datei ist, mit der ich versucht habe, die andere .exe zu starten. Ich muss ihm also irgendwie klar machen, dass die jeweilige .exe im jeweiligen Ordner geladen wird und nicht da, wo mein Games_Launcher liegt. Wäre also nett wenn mir jemand helfen könnte! :)
 
Zuletzt bearbeitet:
Offen gesagt, ich versteh nicht ganz wie du dein Programm zusammen gebastelt hast.

"Current search path:
C:\/etmain"
Übergibt das Prog Daten an die Console? *wunder*
 
Hallo,

ich habe einfach einen CommandButton genommen, dort eingetragen

Shell ("Open the path to the exe")

Jetzt einfach auf den Button klicken, die Console von ET geht auf und gibt den genannten Fehler aus.

Also alles was ich möchte, ist mir selbst ein Programm schreiben mit beispielweise 4 CommandButtons von denen alle 4 Button zu einer "Game.exe" führen, sodass ich nur noch EINE Verknüpfung brauche (mein Programm) öffne dieses, klicke auf das jeweilige Game und los gehts.

Tja... soweit funktioniert das wie gesagt auch, aber NUR, wenn die "Games_Launcher.exe" im jeweiligen Ordner des Spiels ist.

Ansonsten wird der oben genannte Fehler ausgegeben.

Ich nehme an, mein Programm versucht die .exe Datei an der Stelle zu starten, an der es ist. Ist also mein Programm auf Laufwerk D: dann verucht mein Programm das Game von Laufwerk D zu starten. Funktioniert ja auch (da sich die Console öffnet), aber das Game startet nicht weil es die kompletten Dateien nicht findet und sogesehen ja auf D: geladen wird. Sicher verstehst du nicht, wie ich das meine, ich kann es aber nicht anders beschreiben.

Schlichtweg wird die "Spiel.exe" nur dann von meinem Programm mit der "Shell" Funktion korrekt geladen, wenn mein Programm im gleichen Ordner zu finden ist, wie das jeweilige Spiel.

Und das ganze funktioniert eben irgendwie nicht, wenn mein Programm nicht im jeweiligen Ornder (wo auch die "Spiel.exe" Datei) ist.

Versuch es doch einfach mal selbst, schreib dir eben nen kurzes Programm mit einem Button und nimm die "Shell ("Hier ist mein Spiel.exe") und lege dieses kleine Programm dann ausserhalb des Laufwerks aufdem du deine Spiele installiert hast. Du wirst sehen, die .exe des Spiels wird gestartet, das Spiel wird allerdings meckern, dass die gesamten, benötigten Datein fehlen...

Edit:

Habe es eben mit Age of Empires III versucht. "buttonklick" Fehlermeldung "Splash.exe nicht gefunden" -> Schwarzes Bild. Danach wurde dann das Game geladen und es . Starte ich das Spiel aus dem Ordner heraus bekomme ich diese Fehlermeldung nicht, ebenso bekomme ich diese Fehlermeldung nicht, wenn ich meine "Games_Launcher.exe" Datei in den Ordner kopiere indem auch die .exe vom Game selbst ist.
 
Zuletzt bearbeitet:
Tja, bin grad auf der Arbeit und hab hier kein VB zur hand. ich teste mal mit VBA :-)
Ansonsten muss ich mal zuhause testen.

Update:
In VBA getestet, läuft anstandslos...
W - ET hab ich net, kann ich also nicht testen... allerdings ist es bei ID (Sofern der teil von Wolfenstein noch von ID is) Spielen so, dass man das spiel über die normale exe oder über die console starten kann. hast du da noch ne andere exe zur verfügung?
 
Zuletzt bearbeitet:
Wäre nett wenn du dann bescheid sagen könntest, bzw. irgendwer eine Lösung hat... denn ich verstehe es, wenn ich ehrlich bin nicht mal selbst so richtig, da ja der komplette Pfad angegeben ist... naja vielen Dank schonmal!

Und noch nen
€dit:

Mit der ShellExecute geht es ebenfalls nicht, gleicher Fehler. Langsam verzweifel ich...
 
Zuletzt bearbeitet:
Nirraven hat gesagt.:
Tja, bin grad auf der Arbeit und hab hier kein VB zur hand. ich teste mal mit VBA :-)
Ansonsten muss ich mal zuhause testen.

Update:
In VBA getestet, läuft anstandslos...
W - ET hab ich net, kann ich also nicht testen... allerdings ist es bei ID (Sofern der teil von Wolfenstein noch von ID is) Spielen so, dass man das spiel über die normale exe oder über die console starten kann. hast du da noch ne andere exe zur verfügung?

Ahh, habe das erst jetzt gelesen, sorry also für den Doppelpost..

Das Problem liegt bei mir nicht nur in ET, es liegt auch in JEDEM anderen Programm welches ich per "Shell" starten will...

Ich habe es mittlerweile mit AOE3 versucht, ich bekomme nen Fehler, dass eine sogenannte "Splash.exe" nicht vorhanden ist. Packe ich das Programm aber in den Ordner, indem auch die aoe3.exe ist, dann funktioniert es ohne Fehlermeldung.

Starte ich ein anderes Programm welches auf Dateien zugreifen muss, bekomme ich ebenso einen Fehler, dass die Dateien, die das Programm benötigt, nicht vorhanden sind. Starte ich das Programm aber mit dem Games Launcher aus dem Ordner, indem die "Programm.exe" ist, geht es ebenfalls wieder anstandslos.

Um nochmal kurz etwas zu ET zu sagen, das Programm startet per Console, die Console läd alles, startet dann das Game. Das Problem ist nur, die Console von ET versucht an der Stelle zu laden, ander der "Games Launcher" liegt. Liegt der also auf C: dann versucht die Console von ET die Daten die es braucht von C: zu laden. Ebenso bei AOE3.exe . Wenn ich meinen Gameslauncher auf C: liegen habe und darüber versuche AOE3.exe zu starten, so bekomme ich die oben genannte Fehlermeldung "Splash.exe" nicht vorhanden, ganz einfach, weil die AOE3.exe diese "Splash.exe" auf C: sucht, wo sie ja aber nicht ist... Und genau DAS muss man doch irgendwie umgehen können, oder?
 
Aaaaaaaaaalso....wenn ich mir irgend eine Verknüpfung in meinem Startmenü anschaue, dann kann man dort einmal angeben, zu welcher Datei die Verknüpfung verknüpfen soll. Dann ist aber auch noch ein Eingabefeld "Ausführen in" vorhanden.
Vermutlich startet der Shell-Befehl alle Anwendungen so, dass "Ausführen in" dem VB-Programm-Verzeichnis entsprechen würde.

Ich habe da zwei Lösungsvorschläge:
  • Du startest einfach mit der API ShellExecute die Verknüpfung die im Startmenü angelegt worden ist (das wäre dann z.B. eine *.lnk-Datei aus dem Verzeichnis "C:\Dokumente und Einstellungen\Benutzername\Startmenü\")
  • Oder du benutzt den Parameter "Directory" der API ShellExecute, der das "Ausführen in"-Verzeichnis festlegen kann:
Code:
Private Declare Function ShellExecute _
  Lib "shell32.dll" Alias "ShellExecuteA" ( _
  ByVal hWnd As Long, _
  ByVal Operation As String, _
  ByVal Filename As String, _
  Optional ByVal Parameters As String, _
  Optional ByVal Directory As String, _
  Optional ByVal WindowStyle As Long = vbMinimizedFocus _
  ) As Long

Aufruf Z.B. so:
ShellExecute 0, "open","c:\Spiele\TollesSpiel.exe","","c:\Spiele"

siehe auch: http://www.microsoft.com/germany/ms...okumenteInZugehoerigenAnwendungenOeffnen.mspx
 
Zuletzt bearbeitet:
Hallo,

sorry, hatte das Thema vorhin als erledigt markiert, habe jetzt aber doch noch kurz eine Frage zu der ganzen Sache...

Ich bin jetzt soweit mit meinem Programm, dass es letztlich genutzt werden kann, muss nur noch die nötigen "Start Button" fertig machen und dazu brauche ich noch mal kurz hilfe.

Und zwar möchte ich das ganze Variabel machen, habe also den Path in einer Datei gespeichert, die danach ausgelesen wird (im Ganzen, also etwa so: G:\Wolfenstein - Enemy Territory\ET.exe). Soweit sogut, Inhalt schnell in einer Variablen gesichert, nächster Schritt, ich muss gucken, dass ich damit auch folgenden Inhalt IRGENDWIE in eine Variable sichern kann um ihn dann hinten anzuhängen "G:\Wolfenstein - Enemy Territory" um das Game halt in dieser "Directory" ausführen zu können. Folgendermaßen sieht es aus, die Variable ist als Array eingestellt, nur als Info..

game_path(1) = "g:\Wolfenstein - Enemy Territory\ET.exe"
half_game_path(1) = "g:\Wolfenstein - Enemy Territory"

ShellExecute 0, "open", game_path(1), "", half_game_path(1)

~~~Ich möchte die Variable "half_game_path(1) gerne so füllen, nicht das ihr denkt, dass ich das schon habe, ich weiß ja nicht wie. Wie gesagt muss ich das irgendwie aus der "game_path(1) variable lesen...~~~

Nun dachte ich mir, ich mache das einfach mit "If InStr(game_path(1), "\") <> 0 Then..." aber dann kam ich drauf, dass nicht jedes Spiel seine ".exe" direkt im Ordner hat. Doom3 beispielweise liegt "Doom3 -> base -> doom3.exe" und demnach muss ich es ja bestimmten, nur wie? Also das er jedesmal bis zur .exe ausließt, dann beendet und den Inhalt dann in einer neuen Variable sichert...

Vielen Dank nochmal!
 
Zuletzt bearbeitet:
Eine einfache Lösung wäre eine schleife mit Len(game_path(1)) und steps von -1
und dann mit mid(game_path(1),i,1) auf "\" zu prüfen
dadurch erfährst du an welcher stelle dein letzter "\" sitzt, und du kannst entsprechend den pfad vom der eigentlichen Datei trennen.
Da ich mich selbst kaum verstehe, hier ein beispiel:

Code:
Sub test()
Dim var As String
Dim i As Integer
var = "Teststring\test\bla.exe"
For i = Len(var) To 1 Step -1
    If Mid(var, i, 1) = "\" Then
        MsgBox Left(var, i)
        Exit Sub
    End If
Next i
End Sub

Das ergebnis hierbei ist dann Teststring\test\
 
Zurück