tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
829
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    yondaime1981 yondaime1981 ist offline Rookie
    Registriert seit
    Feb 2010
    Beiträge
    7
    Hallo,

    ich programmiere einen Gameloader (Spielstarter) für das Spiel Left 4 Dead 2. Ich weiss, dass es welche gibt, aber ich möchte es selbst realisieren.

    Er funktioniert auch schon, nur wenn ich mit ihm gleich einen anderen Gamemode öffnen möchte, macht er eben dieses nicht. Er startet immer nur den Gamemode Kampange (Coop).
    Eingestellt habe ich aber auch die Modi Versus und Scavange. Sie stehen in einem Dropdownmenü zur Verfügung und sind auch anwählbar aber werden nicht gesetzt oder berücksichtigt.

    Der Code um den es geht:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    
    [I]Public Class Form1
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim xcode As String
            Dim mode As String
            Dim mode1 As String
            Dim endcode As String
     
     
            mode = modebox.SelectedItem
     
            If mode = "" Then                           'Sicherheitsabfrage wenn modus nicht gewählt
                MsgBox("Bitte einen Modus auswählen!")
     
            Else
               [COLOR="Blue"] If mode = "Kampange" Then           'Modusabfrage
                    mode1 = " +coop"
     
                ElseIf mode = "Versus" Then
                    mode1 = " +versus"
                Else
                    mode1 = " +scavange"
     
                End If
     
                xcode = "-console -novid +map c1m4_atrium"
     
                endcode = (xcode + mode1)[/COLOR]
     
     
                [COLOR="Blue"]System.Diagnostics.Process.Start("F:\Program Files\Left 4 Dead 2\left4dead2.exe", endcode)[/COLOR]
     
            End If
     
            'haltepunkt
     
        End Sub[/I]
     
        Private Sub EndeBT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EndeBT.Click
            Me.Close()
     
        End Sub
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim screen As New Splash1()
            screen.ShowDialog()
     
     
        End Sub
     
        Private Sub modebox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles modebox.SelectedIndexChanged
     
            Dim mode = modebox
            Dim maps = mapcontrol
     
            Dim kampange, versus, scavange As String
     
            If mode.SelectedItem = kampange Then
     
                maps.Enabled = True
     
            ElseIf mode.SelectedItem = versus Then
     
                maps.Enabled = True
     
            ElseIf mode.SelectedItem = scavange Then
                maps.Enabled = True
            Else
                maps.Enabled = True
     
     
     
            End If
     
     
     
     
        End Sub
    End Class

    Die Maps werden später mit derselben methode eingefügt.

    Kann mir vielleicht jemand helfen?

    LG Yondaime 1981
     

  2. #2
    Afritus Afritus ist offline Mitglied Silber
    Registriert seit
    Nov 2009
    Beiträge
    54
    Hallo,

    ich denke nicht, dass es an deinem Programm liegt, sondern am Startparameter. Hab eben mal bei Steam alle möglichen Starparameter mit "versus" oder "scavenge" ausprobiert, keiner von diesen scheint zu funktionieren, das Spiel startet weiterhin nur im Kampagne-Modus.
    Also denke ich, dass dein Programm einwandfrei funktioniert und nur der Startparameter falsch ist.

    MfG
     

  3. #3
    yondaime1981 yondaime1981 ist offline Rookie
    Registriert seit
    Feb 2010
    Beiträge
    7
    Zitat Zitat von Afritus Beitrag anzeigen
    Hallo,

    ich denke nicht, dass es an deinem Programm liegt, sondern am Startparameter. Hab eben mal bei Steam alle möglichen Starparameter mit "versus" oder "scavenge" ausprobiert, keiner von diesen scheint zu funktionieren, das Spiel startet weiterhin nur im Kampagne-Modus.
    Also denke ich, dass dein Programm einwandfrei funktioniert und nur der Startparameter falsch ist.

    MfG
    Danke für die Mithilfe

    Ja die gegenproben (habe ich mit nem Label gemacht) waren ok. Es sind alles strings und die Mapauswahl habe ich auch hinzugefügt, das klappt ohne Probleme. Werde verschiedene aufrufe probieren.

    Update:

    Es klappt ohne Probleme, auch die Modi.

    Ich habe eine abfrage in Formload eingebaut. Sie betrifft ob der gamepfad bereits gesetzt wurde. So muss man ihn nur einmal setzen. Also beim Start
    kommt per Folderbrowserdialog die auswahl angezeigt, das geht auch alles wunderbar, speichere den Pfad dann als string in einer variablen ab. Funktioniert super, aber nun möchte ich, das der Pfad, wenn er einmal gewählt ist, auch so bleibt, also die werte gespeichert werden. Wie kann ich das machen?


    hier der Code
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim screen As New Splash1()
            Dim i As Integer
            Dim gamepfad As String
     
     
            screen.ShowDialog()
     
          
     
            mapbox1.Visible = False          'Map auswahlfenster deaktivieren
            mapbox2.Visible = False
            mapbox1.Visible = False
     
     
            'Ab hier wird festgelegt wo die l4d2.exe liegt
            'OpenFileDialog1.ShowDialog()
     
            If i = "0" Then
     
     
                FolderBrowserDialog1.ShowDialog()
                i = i + 1
                pfad1.Text = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
                gamepfad = pfad1.Text
            Else
                pfad1.Text = gamepfad
     
     
            End If
     
     
        End Sub


    PS: Ich habe einen Menüpunkt eingerichtet, mit dem man das wieder auf "" bzw. i = 0 setzen kann damit der benutzer es neu wählen kann.

    Mfg Yondaime 1981
    Geändert von yondaime1981 (08.02.10 um 13:54 Uhr)
     

  4. #4
    Afritus Afritus ist offline Mitglied Silber
    Registriert seit
    Nov 2009
    Beiträge
    54
    Du willst, dass der Pfad gespeichert wird, selbst nachdem das Programm beendet wurde?
    Dann kannst du das zum Beispiel über die Windows-Registry machen. Dort werden Variablen von allen möglichen Programmen gespeichert.

    Hier schaust du nach, ob der Eintrag schon existiert. Wenn auf den Eintrag verwiesen wird, ohne dass er existiert, können nämlich Fehler auftreten:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
    "pfad", Nothing) Is Nothing Then
                My.Computer.Registry.SetValue _
    ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", "")
            End If
     
    End Sub

    So kannst du nun von deinem Eintrag den Pfad auslesen:
    Code :
    1
    2
    3
    4
    
    Dim readValue2 As String
                readValue2 = My.Computer.Registry.GetValue _
                ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", Nothing)
                MsgBox(readValue2)

    Nehmen wir an, der Pfad ist in der Variable "a" gespeichert. Dann kannst du so deinem Eintrag "pfad" den richtigen Pfad hinzufügen (eventuell a.ToString, ich kann das momentan nicht ausprobieren):
    Code :
    1
    2
    
    My.Computer.Registry.SetValue _
    ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", a)

    Zur Erklärung: Mit dem ersten Code prüft du bei Beginn, ob der Registry-Eintrag "pfad" schon existiert. Falls nicht, legst du mit ersten Code einen an und setzt seinen Wert auf "" (also nichts, da ja noch kein Pfad bestimmt wurde). Mit dem zweiten Code kannst du den Wert des Registry-Eintrages "pfad" auslesen. Und mit dem dritten Code kannst du den Wert des Registry-Eintrages "pfad" ändern.
    BTW: Um deine erstellten Registry-Einträge zu überprüfen öffne das Startmenü und gib bei "Ausführen" folgendes ein: regedit
    Damit kannst du von allen Programmen die Registry-Einträge modifizieren. Aber Vorsicht, lass bei anderen Programmen lieber die Finger davon, kann nämlich zu Fehlern im System führen.
    Dein Programm würdest du mit diesem Beispiel unter HKEY_CURRENT_USER/Software/GameLoader finden.

    MfG
    Markus
    Geändert von Afritus (08.02.10 um 14:11 Uhr)
     

  5. #5
    yondaime1981 yondaime1981 ist offline Rookie
    Registriert seit
    Feb 2010
    Beiträge
    7
    Danke für die Hilfe, leider liest er es wohl nicht richtig aus.

    Hier der Code:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim screen As New Splash1()
            Dim i As Integer
            Dim gamepfad As String
     
     
            screen.ShowDialog()
     
            If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
                "pfad", Nothing) Is Nothing Then
                My.Computer.Registry.SetValue _
                ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", "")
            End If
     
     
     
            mapbox1.Visible = False          'Map auswahlfenster deaktivieren
            mapbox2.Visible = False
            mapbox1.Visible = False
     
     
            'Ab hier wird festgelegt wo die l4d2.exe liegt
            'OpenFileDialog1.ShowDialog()
            Dim readValue2 As String
     
            If readValue2 = My.Computer.Registry.GetValue _
                ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", Nothing) Then
                MsgBox(readValue2)
                pfad1.Text = readValue2
     
            Else
     
                FolderBrowserDialog1.ShowDialog()
                i = i + 1
                pfad1.Text = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
                gamepfad = pfad1.Text
                My.Computer.Registry.SetValue _
                    ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", gamepfad)
     
     
                pfad1.Text = gamepfad
     
     
            End If
     
     
        End Sub

    habe deine Codebeispiele eingefügt.

    Danke
    Mfg
    Yondaime1981
     

  6. #6
    Afritus Afritus ist offline Mitglied Silber
    Registriert seit
    Nov 2009
    Beiträge
    54
    Wo scheiterts denn? Hast du nachgesehen, ob der Registry-Eintrag erstellt wird?

    Vielleicht hilft dir das weiter:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
    "pfad", Nothing) Is Not Nothing Then
                pfad1.Text = gamepfad
                
    Else
     
                FolderBrowserDialog1.ShowDialog()
                i = i + 1      ' was meinst du damit?
                gamefpad = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
                My.Computer.Registry.SetValue _
                    ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", gamepfad)
     
     
                pfad1.Text = gamepfad
     
     
    End If

    MfG
     

  7. #7
    yondaime1981 yondaime1981 ist offline Rookie
    Registriert seit
    Feb 2010
    Beiträge
    7
    Zitat Zitat von Afritus Beitrag anzeigen
    Wo scheiterts denn? Hast du nachgesehen, ob der Registry-Eintrag erstellt wird?

    Vielleicht hilft dir das weiter:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
    "pfad", Nothing) Is Not Nothing Then
                pfad1.Text = gamepfad
                
    Else
     
                FolderBrowserDialog1.ShowDialog()
                i = i + 1      ' was meinst du damit?
                gamefpad = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
                My.Computer.Registry.SetValue _
                    ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", gamepfad)
     
     
                pfad1.Text = gamepfad
     
     
    End If

    MfG
    also habs geändert aber : Not nothing sagt: Der Is-Operator akzeptiert keine operanden vom Typ "Integer" , Die Operanden müssen refferenztypen sein oder Typen die NULL werte zulassen. Was genau möchte er jetzt von mir? Wie kann ich den Code zum laufen bringen?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
      If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
                "pfad", Nothing) Is [COLOR="Blue"]Not Nothing[/COLOR] Then
                pfad1.Text = gamepfad
     
     
            Else
     
                FolderBrowserDialog1.ShowDialog()
                pfad1.Text = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
                gamepfad = pfad1.Text
                My.Computer.Registry.SetValue _
                    ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", gamepfad)
     
     
                pfad1.Text = gamepfad
     
     
            End If

    Danke dir für deine Hilfe
    Geändert von yondaime1981 (08.02.10 um 16:49 Uhr)
     

  8. #8
    Afritus Afritus ist offline Mitglied Silber
    Registriert seit
    Nov 2009
    Beiträge
    54
    Sry, ich hab mich da wohl selbst etwas vertan.

    Hier, das sollte funktionieren:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    Dim value As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
               "pfad", Nothing)
            If value = "" Then
                FolderBrowserDialog1.ShowDialog()
                value = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
                My.Computer.Registry.SetValue _
                    ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", value)
                pfad1.Text = value
            Else
                pfad1.Text = value
            End If

    Sind sogar weniger Zeilen als vorher. Die Aktion prüft, ob der Pfad schon vorhanden ist. Wenn nicht, musst du ihn mit dem FolderBrowser aussuchen. Falls der Wert jedoch schon vorhanden ist, trägt er ihn automatisch in die pfad1-Textbox ein.

    MfG
    Afritus
     

  9. #9
    yondaime1981 yondaime1981 ist offline Rookie
    Registriert seit
    Feb 2010
    Beiträge
    7
    Hab ich gemacht aber er übernimmt den Eintrag wohl einfach nicht. er setzt nur den angefügten text "left4dead2.exe" in das vorgesehene Texfeld ein.

    Der Eintrag ist in der Reg verfügbar, wird im Programm aber nicht aufgerufen, was kann ich machen damit er eben dies tut?

    hier nochmal der code unter formload:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim screen As New Splash1()
            Dim i As Integer
            Dim gamepfad As String
     
     
            screen.ShowDialog()
     
            If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
                "pfad", Nothing) Is Nothing Then
                My.Computer.Registry.SetValue _
                ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", "")
            End If
     
     
     
            mapbox1.Visible = False          'Map auswahlfenster deaktivieren
            mapbox2.Visible = False
            mapbox1.Visible = False
     
     
            'Ab hier wird festgelegt wo die l4d2.exe liegt
            'OpenFileDialog1.ShowDialog()
            Dim readValue2 As String
     
            'If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
            '   "pfad", Nothing) Like Nothing Then
     
     
            'FolderBrowserDialog1.ShowDialog()
            ' pfad1.Text = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
            'gamepfad = pfad1.Text
            'My.Computer.Registry.SetValue _
            '   ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", gamepfad)
     
     
            ' pfad1.Text = gamepfad
            ' Else
     
            'gamepfad = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
            '"pfad", Nothing)
     
            'pfad1.Text = gamepfad
     
     
            'End If
     
            [B][COLOR="DarkOliveGreen"]'ab hier dein Code, habe den anderen auskommentiert[/COLOR][/B]
     
            Dim value As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
               "pfad", Nothing)
            If value = "" Then
                FolderBrowserDialog1.ShowDialog()
                value = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
                My.Computer.Registry.SetValue _
                    ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", value)
                pfad1.Text = value
            Else
                pfad1.Text = value
            End If
     
     
     
        End Sub

    Mfg Yondaime
     

  10. #10
    Afritus Afritus ist offline Mitglied Silber
    Registriert seit
    Nov 2009
    Beiträge
    54
    Jetzt kannt ich dir leider auch nicht mehr helfen, da derselbe Code bei mir funktioniert

    Aufgerufen wird der Eintrag durch diesen Code, der ist aber bei dir schon drinnen:
    Code :
    1
    2
    3
    
    Dim value As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
               "pfad", Nothing)
    pfad1.Text = value

    Lösche mal den Ordner "GameLoader" in der Registry unter HKEY_CURRENT_USER/Software/ und führe dann das angehängte Programm aus und schau, obs funktioniert.

    MfG
    Afritus
    Angehängte Dateien Angehängte Dateien
     

  11. #11
    yondaime1981 yondaime1981 ist offline Rookie
    Registriert seit
    Feb 2010
    Beiträge
    7
    Zitat Zitat von Afritus Beitrag anzeigen
    Jetzt kannt ich dir leider auch nicht mehr helfen, da derselbe Code bei mir funktioniert

    Aufgerufen wird der Eintrag durch diesen Code, der ist aber bei dir schon drinnen:
    Code :
    1
    2
    3
    
    Dim value As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
               "pfad", Nothing)
    pfad1.Text = value

    Lösche mal den Ordner "GameLoader" in der Registry unter HKEY_CURRENT_USER/Software/ und führe dann das angehängte Programm aus und schau, obs funktioniert.

    MfG
    Afritus
    ja das Testprogramm hat funktioniert, also Ich habe den wert in der Reg gelöscht , dann deine test.exe ausgeführt, den pfad gewählt und dann kam ne Msgbox mit dem pfad.

    Woran kanns bei mir liegen? Also in meinem loader

    mfg Yondaime1981
     

  12. #12
    Afritus Afritus ist offline Mitglied Silber
    Registriert seit
    Nov 2009
    Beiträge
    54
    Bei meinem Testprogramm habe ich genau diesen Code verwendet (1mal FolderBrowserDialog1, 1mal TextBox1):

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
                "pfad", Nothing) Is Nothing Then
                My.Computer.Registry.SetValue _
                ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", "")
            End If
     
     
     
            Dim value As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
               "pfad", Nothing)
            If value = "" Then
                FolderBrowserDialog1.ShowDialog()
                value = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
                My.Computer.Registry.SetValue _
                    ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", value)
                TextBox1.Text = value
            Else
                TextBox1.Text = value
            End If
     
        End Sub

    Versuch mal, ob es so klappt.

    MfG
    Afritus
     

  13. #13
    yondaime1981 yondaime1981 ist offline Rookie
    Registriert seit
    Feb 2010
    Beiträge
    7
    Es funktioniert

    Vielen vielen Dank.


    Jetzt nur noch der feinschliff und es ist fertig



    Mfg Yondaime1981
     

  14. #14
    Afritus Afritus ist offline Mitglied Silber
    Registriert seit
    Nov 2009
    Beiträge
    54
    Kein Problem, wenn du Fragen hast, einfach fragen

    MfG
     

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 14.10.10, 16:45
  2. vb.net express 2008 COM komunikation
    Von melmann im Forum .NET Windows Forms
    Antworten: 1
    Letzter Beitrag: 16.06.09, 20:32
  3. Vb 2008 Express Steuerung
    Von ToyLand im Forum Visual Basic 6.0
    Antworten: 3
    Letzter Beitrag: 05.09.08, 16:53
  4. Winsock in VB 2008 Express
    Von TechnoLogiY im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 27.08.08, 09:02
  5. VB Express 2008 - ODBC
    Von sumwear im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 13.08.08, 17:31

Stichworte