PixelSearch im Spiel

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    PixelSearch im Spiel

    Hey Leute,

    Ich versuch immoment eine gewisse Stelle im Spiel nach Farbe zu prüfen und falls eine gewisse Farbe eintrifft, eine Aktion durchzuführen.
    Das hab ich mit GetPixel gemacht, dass ging auch, allerdings etwas zu langsam.
    Daraufhin hab ich mich nach einer anderen Möglichkeit umgeschaut und bin auf die FastGraphics Lib gestoßen([Beta] FastGraphicsLib 1.0.0.5)

    So ich weiß jetzt nur nicht ganz wie ich die bestimmten Koordinaten und deren Pixel nur in meinem gewählten Spiel nach farbe untersuche

    Mit der langsamen GetPixel Methode hab ich das so gemacht:

    Als erstes mit Finwindow mein Spiel gesucht und dann das Device Context mit GetDC ermittelt.

    VB.NET-Quellcode

    1. Dim hwnd As Long = FindWindow(vbNullString, "Mein Spiel")Dim hdc As Long = GetDC(hwnd)


    Hier les ich den bestimmten Pixel dauerhaft aus und führe eine Aktion durch, wenn dieser blau sein sollte...

    VB.NET-Quellcode

    1. Do
    2. If hwnd = GetForegroundWindow() Then
    3. Dim striaf As String = GetPixel(hdc, 300, 232)
    4. If striaf = 16711680 Then
    5. 'Aktion
    6. End If
    7. End If
    8. Loop


    Wie gesagt ist das jetzt etwas zu langsam :/

    Das stand in dem Thread zu der FastGraphics Lib

    VB.NET-Quellcode

    1. Dim fg As FastGraphics = FastGraphics.FromScreen(New Rectangle(50, 50, 200, 200))


    Meine Frage ist, wie ich mit der FastGraphics Lib das Fenster nur auf mein Spiel setzen kann also nur die bestimmten Koordinaten im Spiel ausgelsen werden, so wie ich das mit der langsamen Methode mit dem Device Context gemacht habe
    So machst Du Dir von Deiner eigenen Form ein Screenshot:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. <StructLayout(LayoutKind.Sequential)>
    4. Public Structure POINTAPI
    5. Public x As Integer
    6. Public y As Integer
    7. End Structure
    8. <DllImport("user32.dll")> _
    9. Public Shared Function ClientToScreen(ByVal hWnd As IntPtr, ByRef pt As POINTAPI) As Integer
    10. End Function
    11. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    12. Dim bmp As New Bitmap(Me.Width, Me.Height)
    13. Dim g As Graphics = Graphics.FromImage(bmp)
    14. Dim dx As Integer = (Me.Width - Me.ClientRectangle.Width) \ 2
    15. Dim dy As Integer = Me.Height - Me.ClientRectangle.Height - dx
    16. Dim pt As POINTAPI
    17. pt.x -= dx ' -Rand-Breite
    18. pt.y -= dy ' -Titelzeilen-Höhe
    19. ClientToScreen(Me.Handle, pt)
    20. g.CopyFromScreen(pt.x, pt.y, 0, 0, Me.Size)
    21. g.Dispose()
    22. bmp.Save("c:\Temp\Shot.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
    23. End Sub
    24. End Class
    Verstehe den Code, modifiziere ihn und Dein Problem ist gelöst.
    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!