Text abgleich von RTB,LB und TB (KI Modus)

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Hackt3c.

    Text abgleich von RTB,LB und TB (KI Modus)

    Moinsen :) alsooo ich komme einfach nicht weiter ^^ kann auch evtl dran liegen das ich zurzeit ne Chemotherapie machen und sowieso gefühlt dümmer geworden bin.... ich habe für mich ein Energiespar Programm gecoodet




    Es Besitzt eine Config etc , man kann oben auswählen für welches Spiel usw usw soo mein problem ist jetzt ich möchte eine KI einbauen das ich nicht immer auswählen muss was ich grade spielen möchte das ers halt alleine findet. ich habe die Processe in eine LB geladen und in einer RTB überladen weil ich bei LB nicht mit contains arbeiten kann wenn ich richtig liege müsste er aus der Spieleliste jede Zeile einzeln auslesen und dann mit contains zeile für zeile die process liste abgleichen oder ? auf meiner Testform bin ich da nun stehen geblieben :


    VB.NET-Quellcode

    1. LB1.Items.Clear()
    2. Dim ProzesseCount As Integer = 0
    3. Dim GamesCount As Integer = 0
    4. Dim KICount As Integer = 0
    5. Dim ProzesseNumbers As New TextBox
    6. Dim GamesNumbers As New TextBox
    7. Dim KINumbers As New TextBox
    8. ProzesseCount = RTB1.Lines.Length
    9. GamesCount = GAME.Lines.Length
    10. Dim ProzzZeile As String = CInt(Int((ProzesseCount)))
    11. Dim GameZeile As String = CInt(Int((GamesCount)))
    12. For KICount = 0 To ProzesseCount - 1
    13. If GameList.Contains(TextBox1.Lines(KICount)) - 1 Then
    14. LB1.Items.Add("Gefunden")
    15. KICount += 1
    16. Else
    17. LB1.Items.Add("Nichz Gefunden")
    18. KICount += 1
    19. End If
    20. KIM3()
    21. Next



    ich denke das ist mehr als falsch ^^# der code dürfte auch nicht so schwer sein nur komme ich nicht drauf und bin auch kein Programmier Ass.Wäre schön wenn Jemand Helfen kann :)

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Willkommen im Forum. Auch wenn manchmal das Denken schneller als das Tippen ist: Bitte Punkt und Komma verwenden. Sonst muss man alles 3x lesen, bevor man das kapiert.
    Als erstes: Option Strict On, denn Zeile#13 und #14 schreien nach »WTF?!?«
    Was haben die Zeilen#6-#8 für einen Sinn? Nimmst Du die CEs etwa als Datenspeicher her? Dafür gibt es eine List(Of String)!
    Dein Plan ist also, dass die Prozesse nach Spielenamen abgesucht werden, richtig? Was vergleichst Du? Prozesse haben mehr als nur einen Namen, nämlich Dutzende von Eigenschaften. Und der Prozessname ist nicht immer gleich einem Spiele-/Anwendungstitel.
    Was ist in der GameList drin? Was hat GameList für einen Typ?
    Da stehen zuviele Fragen im virtuellen Raum.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das leben ist zu kurz um im Internet auf Rechtschreibung zu achten ;) , Also das Grund Programm läuft dabei brauch ich keine hilfe.Meine Gamelist wird aktuell in einer txt als (data) file mit den dazugehörigen ES Plan bsp :
    Cuphead/4
    LeagueClient/2
    League of Legends/3
    Mafia2/3
    TS4_x64/4
    Application-x64/4
    ultradefrag/4
    javaw/3
    archeage/2
    GlyphClientApp/2
    Addon/2



    das Funktioniert Super Alles , nur nicht das er von Alleine weiß was ich will wie auf den bild oben zu sehen muss man in der combobox eintragen/auswählen welches Spiel man grade geboostet haben möchte.

    Meine Idee dahinter ist halt das man die Gameliste als Zeile einzeln ausliest und als cointains in der Prozess Liste schaut die ist auf Listbox aktuell aber wird durch ein Code in richtextbox umgewandelt weil ich kein Contains bei der lb benutzen konnte.Der Code dort war der Letzte ich sag mal Frankensteinbaukasten versuch,ich habe versucht halt das er nach und nach die Zeilen abgeht aber das mit den counter+1 Krieg ich nicht hin also ne schleife zum zählen.Hoffe man versteht mein wirres schreiben ^^

    PS: Könnte auch zur Veranschaulichung das Ganze projekt hier hochladen aber dann wird mehr als nur ein "WTF?!?!" kommen ^^#### Läuft aber trotzdem und bin vorerst zufrieden .
    Sorry, ich versteh nicht, was Dein Plan ist. An welchem Punkt soll Dein Programm festmachen, was der User für ein Spiel starten will? Solche Sätze wie

    Hackt3c schrieb:

    Meine Gamelist wird aktuell in einer txt als (data) file mit den dazugehörigen ES Plan bsp
    kann ich inhaltlich leider nicht begreifen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wie ich oben geschrieben habe bsp Cuphead/4 LeagueClient/2 ,von dort bezieht er den Wert (Zahl).
    Ich besitze 4 Energiesparpläne(ESP)
    Nummer 4 ist Logischerweise für Höchstleistung.

    Im Programm ist Verankert das wenn er bsp Die Nummer 4 hinter ein Spiel ausliest das er die Public function Energieplan4 starten soll.

    bsp:

    VB.NET-Quellcode

    1. If Process.GetProcessesByName(combobox1.text).Count > 0 Then EnergieModusXY()


    Die wiederum Startet einen Shell befehl wodurch der ESP geändert wird .

    bsp:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. EnergiesparPlan1 = "00648831-5a66-4916-9576-4eae649e00aa"
    2. EnergiesparPlan2 = "a1841308-3541-4fab-bc81-f71556f20b4a"
    3. EnergiesparPlan3 = "381b4222-f694-41f0-9685-ff5bb260df2e"
    4. EnergiesparPlan4 = "8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c"
    5. '////////////////////////////////////////////////////////////////////////////////Energiesparpläne als Strings festlegen
    6. EnergiesparPlanFull1 = "Powercfg -setactive " + EnergiesparPlan1
    7. EnergiesparPlanFull2 = "Powercfg -setactive " + EnergiesparPlan2
    8. EnergiesparPlanFull3 = "Powercfg -setactive " + EnergiesparPlan3
    9. EnergiesparPlanFull4 = "Powercfg -setactive " + EnergiesparPlan4
    10. Shell(EnergiesparPlanFullXY)


    dann eine abfrage des aktuellen ESP durch ein CMD befehl das mein programm unten immer den Zeiger auf dem richtigen ESP hat.

    bsp:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim CmdContent As String = Nothing
    2. Using ConsoleProcess As New Process
    3. ConsoleProcess.StartInfo.CreateNoWindow = True
    4. ConsoleProcess.StartInfo.FileName = "cmd.exe"
    5. ConsoleProcess.StartInfo.RedirectStandardOutput = True
    6. ConsoleProcess.StartInfo.RedirectStandardInput = True
    7. ConsoleProcess.StartInfo.UseShellExecute = False
    8. ConsoleProcess.Start()
    9. ConsoleProcess.StandardInput.WriteLine("@echo off")
    10. ConsoleProcess.StandardInput.WriteLine("powercfg /GETACTIVESCHEME")
    11. ConsoleProcess.StandardInput.WriteLine("exit")
    12. ConsoleProcess.WaitForExit()
    13. CmdContent = ConsoleProcess.StandardOutput.ReadToEnd()
    14. If CmdContent.Contains(EnergiesparPlan1) Then TrackBar1.Value = "1"
    15. If CmdContent.Contains(EnergiesparPlan2) Then TrackBar1.Value = "2"
    16. If CmdContent.Contains(EnergiesparPlan3) Then TrackBar1.Value = "3"
    17. If CmdContent.Contains(EnergiesparPlan4) Then TrackBar1.Value = "4"
    18. End Using


    Wenn der Prozess geschlossen ist geht er auf den Ursprünglichen Energiesparplan zurück.



    so und mein Plan also die Idee dahinter ist das ich nicht immer aus der Liste vorher auswählen muss was ich als nächstes spielen möchte.Sondern das er selber bei der abfrage ob das gewünschte spiel auf ist [beim Timer] ( vllt gibts was besseres bisher hab ich aber nur den timer genutzt ) eine Text kontrolle macht .

    Die Gameliste Zeile 1 Kontrollieren ob sie in der Prozessliste ( die ich schon auslesen kann ) vorhanden ist wenn nicht weiter mit Zeile 2 ,... bis zur Letzten.Da hatte ich auch schon probleme da ich nicht mit Variablen arbeiten konnte sondern nur mit vorgelegten Zeilen das er mir nicht ausserhalb des Arrays verschwindet da sich die Gameliste ja stetig erweitert.
    Halt eine abfrage von Zeile 1 bis soviele wie es gibt.damit könnte ich dann denke ich schon alleine Weiterarbeiten wäre ja dann nurnoch das contains vergleichen.

    Hoffe das ist nun verständlicher Erklärt. :)

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „Hackt3c“ ()

    Hackt3c schrieb:

    Das leben ist zu kurz um im Internet auf Rechtschreibung zu achten ;)

    Absolut nicht. Jedesmal wenn jemand nicht auf Rechtschreibung achtet verschwendet jemand der das liest seine Lebenszeit damit die scheiße richtig zu deuten. (Sorry klingt hart ist aber so)

    Hackt3c schrieb:

    combobox eintragen/auswählen welches Spiel man grade geboostet haben möchte.

    Boosten? Inwiefern? Das Spiel wird nicht besser laufen nur weil du einen Energiesparplan änderst. Dort wird nur festgelegt ab wieviel Zeit XY abgeschaltet werden soll. Oder ab wann etwas runter getaktet werden soll.
    Oder die Helligkeit usw. Egal welchen Sparplan ich wähle die Spiele laufen gleich gut.

    Wenn ich das so richtig verstanden habe willst du wenn Spiel XY läuft den Energieplan auf 1/2/3/4 ändern?
    Was machst du wenn 2 Spiele laufen ?

    Wenn deine Liste so daraus besteht wie hier gezeigt brauchst du ja nur Zeile für Zeile auslesen und Splitten.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Mit leichter Legasthenie und dann noch Krebs nimmt man sowas nicht all zu wichtig...traurig aber wahr.




    wie du sehen kannst,kann man dort mehr einstellen als deine besagten Dinge.


    Das Programm Läuft doch schon längst...Erfolgreich.

    Ne , ich brauche den code für eine Zeilen abfrage mit variablen da sich meine spieleliste immer erweitert ist sie nie gleich groß also weiß ich nicht wie viele Zeilen bsp ich laden müsste ohne das ich nen error kriege wegen ausserhalb des arrays weil die zeile nicht gibt , für eine KI soll er selber ohne vorher aushlen zu müssen abgleich der gamelist mit der process liste.



    so und es nochmal klar zu machen
    ich brauche Hilfe dabei eine "Zeile 1 bis Letzte Zeile die existiert" code anzufertigen damit ich mit jeder zeile in der Prozessliste dannach suchen Kann.Bisher kann ich nur feste werte fertigen und keine Variablen habe es mit select case versucht aber auch nicht hinbekommen.
    Mit System.IO.File.ReadAllLines kannst du die Textdatei Zeile für Zeile auslesen.
    Und mit String.Split() kannst du halt deinen String noch splitten.
    Dann brauchst du ja nur noch durchlaufen ob was läuft Beispiel ist ja auch in dem Link enthalten.

    *Prozessoren takten sich doch schon selbst im Leerlauf runter (Meiner tut das zumindest) oder machen das nicht alle?
    Desweiteren warum sollte man die Maximale Leistung seines Prozessors begrenzen? Das macht doch alles nur Schwieriger?
    Ich verstehe diese Windows Funktion vom Sinn her also nicht denn wie gesagt runtertakten tut sich der CPU ja selbst.
    Und wenn er Leistung braucht taktet er wieder hoch.*
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Den Text kann ich doch schon in Lines Splitten aber ich weiß doch nie wie viele es werden Maximal.

    wenn ich Festlege zum bleistift das tb1=lines(0) ist und tb2=lines(1) usw krieg ich irgendwann nen fehler wenn ich das vorschreibe und es die zeile nicht gibt.

    VB.NET-Quellcode

    1. ​For Each Process In Process.GetProcesses(My.Computer.Name)
    2. On Error Resume Next
    3. LB1.Items.Add(Process.ProcessName)
    4. Count += 1
    5. Next



    Sowas brauch ich für meine Anwendung eine Schleife von Zeile 1 bis soviele wie es gibt und nicht Zeile 1,Zeile 2,Zeile3,.. und die bekomme ich nicht hin.Wenn ich versuche in den code es zu nehmen das er den Aktuellen Prozess siehe(LB1.Items.Add(Process.ProcessName) zum vergleichen liest überspringt er das und macht einfach weiter.
    Weiß ja jetzt nich wo das Problem liegt.
    Aber in dem MSDN Artikel von ReadLines steht doch wie man eine Textdatei ZEILE für ZEILE bis keine mehr da ist ausliest.
    Da muss du nicht wissen wieviele Zeilen drin sind.

    Liest du die halt aus und speicherst die Spiele in ne List of String und wenn du die Prozesse durch gehst prüfst du mit .Contains()
    ob der Prozess in der Spiele liste ist. Wenn ja machst du was du machen willst und wenn nein machst du was anderes ( If / Else )

    EDIT// @Hackt3c
    Hier mal ein kleines Beispiel ich habe ledeglich einen Button(Button1) und eine ListBox(ListBox1) auf die Form gezogen.
    Deine Textdatei genommen und chrome hinzugefügt zum testen. Nun geht er die Textdatei komplett durch und fügt nur die Einträge in die Listbox
    wenn der Prozess in der Textdatei steht.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Diagnostics
    3. Public Class Form1
    4. Public Structure Game
    5. Dim Name As String
    6. Dim EnergieID As Integer
    7. End Structure
    8. Dim gameList As New List(Of Game)
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    10. gameList.Clear()
    11. ListBox1.Items.Clear()
    12. For Each line As String In System.IO.File.ReadLines("test.txt")
    13. Dim tmpArr As String() = line.Split(Convert.ToChar("/"))
    14. Dim game As New Game
    15. game.Name = tmpArr(0)
    16. game.EnergieID = Convert.ToInt32(tmpArr(1))
    17. gameList.Add(game)
    18. Console.WriteLine("NAME: " + tmpArr(0).ToString() + " /// ENERGIE: " + tmpArr(1).ToString())
    19. Next
    20. For Each process As Process In Process.GetProcesses(My.Computer.Name)
    21. Dim item = gameList.FirstOrDefault(Function(x) x.Name = process.ProcessName)
    22. If item.Name IsNot Nothing Then
    23. ListBox1.Items.Add(process.ProcessName)
    24. End If
    25. Next
    26. End Sub
    27. End Class



    Bei der Consolen Ausgabe erscheint nur um zu sehen ob der Split klappt alles mal aufgeteilt als:

    Quellcode

    1. NAME: Cuphead /// ENERGIE: 4
    2. NAME: LeagueClient /// ENERGIE: 2
    3. NAME: League of Legends/// ENERGIE: 3
    4. NAME: Mafia2/// ENERGIE: 3
    5. NAME: TS4_x64/// ENERGIE: 4
    6. NAME: Application-x64/// ENERGIE: 4
    7. NAME: ultradefrag/// ENERGIE: 4
    8. NAME: javaw/// ENERGIE: 3
    9. NAME: archeage/// ENERGIE: 2
    10. NAME: GlyphClientApp/// ENERGIE: 2
    11. NAME: Addon/// ENERGIE: 2
    12. NAME: chrome/// ENERGIE: 1


    Ich hoffe ich konnte dir mit dem Beispiel helfen. Das macht keinen Unterschied wenn mehr oder weniger Einträge in der Textdatei sind.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „xChRoNiKx“ ()

    Kann ich eine if exist line(XY) abfrage machen ?

    Verstehe echt nicht wie ich mit den readlines anders arbeiten kann sonst hätte ich das Problem ja jetzt nicht ^^


    EDIT

    ich glaube ich habe es mit :

    VB.NET-Quellcode

    1. Private Function JIM()
    2. Dim GameList As String = "Data\Data\Gamelist.data"
    3. Dim GameZeile, GameZeilen, GameName As String
    4. Dim lines() As String = System.IO.File.ReadAllLines(GameList)
    5. GameZeilen = CStr(System.IO.File.ReadAllLines(GameList).Count) '// Zeilen Nummer anzeigen
    6. Dim ItemObject(GameZeilen) As System.Object
    7. Dim Counter As Integer
    8. For Counter = 0 To GameZeilen
    9. If Counter < GameZeilen Then
    10. GameZeile = lines(Counter) '// Spiel 1
    11. ItemObject(Counter) = GameZeile & Counter
    12. GameName = GameZeile.Split("/")(0) ' Spiel Name
    13. If RTB1.Text.Contains(GameName) Then
    14. MsgBox("gefunden" + GameName)
    15. End If
    16. End If
    17. Next Counter
    18. Dim GamesCount As Integer = 0
    19. GamesCount = GAME.Lines.Length
    20. Return Nothing
    21. End Function



    hinbekommen.



    EDIT EDIT:

    Kann geschlossen werden , habs doch alleine hinbekommen.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Hackt3c“ ()