Hilfe Programm zum automatischen Spielestart

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Hilfe Programm zum automatischen Spielestart

    Hallo Liebe VB-Paradise Comunity,

    Ich habe ein kleines problem. Ich bin gerade dabei ein Programm zu Schreiben indem
    Freunde von mir mit weniger Ahnung von PC's einfach auf die Buttons drücken um ein Spiel zu starten.
    Ich habe es mit den folgenden befehlen versucht ( an dem Beispiel von Call of duty 4):
    Versuch1:

    VB.NET-Quellcode

    1. Dim Programm As Long
    2. Programm = Shell("C:\Spiele\Call of Duty 4\iw3mp.exe")

    Mit dem befehl startet er die .exe, sucht aber die dateien die zu dem spiel gehören in "c:\"
    und nicht im Spieleverzeichnis.
    Versuch2:

    VB.NET-Quellcode

    1. Dim Programm As Long
    2. Programm = Shell("explorer /e,C:\Spiele\iw3mp.exe", vbNormalFocus)

    mit diesem Befehl wird ja der Pfad der Exe an dem Explorer weitergegeben.
    Bei Call of Duty 4 bekomme ich dann zwei Fehlermeldungen:
    WIN_IMPROPER_QUIT_BODY ... wo ich dann zuwischen Ja, Nein und Abbrechen auswählen kann

    Error during initialization:
    No IWD files found in /main ... Er sucht wohl irgendwo anders die benötigten Daten aber nicht im Spieleverzeichnis (Anderes Programm wollte im Windows verzeichnis Die Spieldateien suchen)

    Jetzt meine Frage gibt es einen Befehl mitdem man auch auswählen kann wo die .exe gestartet werden soll? Oder hat jemand vielleicht eine Idee das Problem zu lösen?

    P.S.: Das Spiel ist nicht dran schuld, wenn ich es manuell starte funktioniert es ohne Fehler.

    Entschuldigung für den Langen Text wollte das Problem nur ausführlich Schildern :D
    Ich bedanke mich schonmal für Hilfe :)

    Krogjan

    VB.NET-Quellcode

    1. ChDir(phat-zum-game) //spinge in ein ordner
    2. MsgBox("Suriva Startet")
    3. Process.Start(game.exe) //exe im pfad chdir ausführen
    4. ChDir((IO.Path.GetDirectoryName(Reflection.Assembly.GetExecutingAssembly.Location))) //chdir wieder zum pfad von dem programm machen


    vllt nich das beste aber so gehts
    Sprechen wir hier von VB.Net oder VB6 ? Alles sieht ziemlich nach VB6 aus :|
    // ist ausserdem nicht VB

    Probier das mal

    VB.NET-Quellcode

    1. Dim game As New Process
    2. With game
    3. .StartInfo.FileName = "Pfad der exe"
    4. .StartInfo.WorkingDirectory = "Pfad des Directory"
    5. End With
    6. game.Start()

    WorkingDirectory gibt den Pfad an, indem das Programm ausgeführt werden soll.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gonger96“ ()

    Problem gelöst

    Gonger96 schrieb:

    Probier das mal

    VB.NET-Quellcode

    1. Dim game As New Process
    2. With game
    3. .StartInfo.FileName = "Pfad der exe"
    4. .StartInfo.WorkingDirectory = "Pfad des Directory"
    5. End With
    6. game.Start()

    WorkingDirectory gibt den Pfad an, indem das Programm ausgeführt werden soll.

    Vielen Dank Gonger96, :)
    Damit startet er Call of Duty 4. Das Thema werde ich mal als Erledigt markieren. :)

    Code Erweiterung EROR-Meldung

    Nach längerem ausprobieren würde ich den code gerne erweitern.

    Wenn ich jetzt ein Fehler beim Pfad des Spiels gemacht habe kommt diese Fehlermeldung:


    Wie kann ich eine eigene EROR meldung in form einer Msgbox einbauen wo dann z.B.: steht:
    "Spiel konnte nicht gestartet werden"
    Die erscheint wenn als Beispiel der Pfad im Programm nicht richtig angegeben wurde,
    sodass die Fehlermeldung oben nicht mehr erscheint.

    Ich Bedanke mich jetzt schonmal für eure Hilfe :)
    Benutz eine TryCatch-Schleife, das sollte bei dir genügen. Das sieht dann so aus:

    VB.NET-Quellcode

    1. Dim game As New Process
    2. With game
    3. .StartInfo.FileName = "Pfad der exe"
    4. .StartInfo.WorkingDirectory = "Pfad des Directory"
    5. End With
    6. Try
    7. game.Start()
    8. Catch ex As Exception
    9. MessageBox.Show("Spiel konnte nicht gestartet werden")
    10. End Try


    Hoffe, das hilft.

    EDIT: Wenn du den Fehler genauer bekommen möchtest, schau dir das mal an: dreamincode.net/forums/topic/8…nners-part-two-try-catch/

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nafets3646“ ()

    nafets3646 schrieb:

    Benutz eine TryCatch-Schleife,
    So nicht, schließlich willst Du Fehler finden, nicht verschleiern.
    @Krogjan: Welchen Wuelltext hast Du denn in den Zeilen

    VB.NET-Quellcode

    1. .StartInfo.FileName = HIER
    2. .StartInfo.WorkingDirectory = UND_HIER
    tatsächlich stehen?
    Kannst Du uns auch mit den Details der Fehlermeldung erfreuen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    nafets3646 schrieb:

    TryCatch-Schleife

    Am Besten noch mit einer If-Schleife kombinieren...

    Ne mal ernsthaft. Entweder du überprüfst zuerst ob dein Verzeichnis/Datei vorhanden ist mit z.B. If File.Exists("pfad zur exe") Then ... oder du verwendest Exceptionhandling -> Try/Catch.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    nafets3646 schrieb:

    Aber genau das hat er aber gesagt
    Offensichtlich kann einer von uns beiden nicht lesen.
    Vom TE kommt nur der Aufruf mit Shell mit einer sinnvollen Pfadangabe:

    Krogjan schrieb:

    Programm = Shell("C:\Spiele\Call of Duty 4\iw3mp.exe")
    ...
    Programm = Shell("explorer /e,C:\Spiele\iw3mp.exe", vbNormalFocus)
    ansonsten für die Process-Variante lediglich dies:

    VB.NET-Quellcode

    1. .StartInfo.FileName = "Pfad der exe"
    2. .StartInfo.WorkingDirectory = "Pfad des Directory"
    Für eine korrekte Befüllung dieser Properties habe ich noch kein Indiz gefunden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also mir ging es garnicht darum den Fehler zu beheben
    (da ich den Fehler selbst erzeugt habe indem ich einfach einen anderen Laufwerksbuchstaben angeben habe der nicht Existiert)
    Ich wollte einfach nur eine eigene Fehlermeldung haben,
    da ich finde das die Fehlermeldung von VB.NET dazu verleitet
    auf Beenden zu klicken und somit das ganze Programm zu schließen.

    Also wollte ich einfach wenn der Pfad nicht stimmt oder sonst was beim
    starten nicht funktioniert einfach eine Msgbox "Spiel konnte nicht gestartet werden"
    anzeigt mit dem Dialog einfach auf OK klicken zu können.

    Ich hoffe ich konnte alle missverständnisse aufklären :D
    Aber danke schonmal für die Lösungsvorschläge :)

    Krogjan schrieb:

    Also mir ging es garnicht darum den Fehler zu beheben
    Warum schreibst Du in Deinen Eröffnungspost nicht einfach rein, was Du tatsächlich willst?
    Warum kommt solch völlig unwichtige Information erst in Post 13?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!