Beantwortet Visual Basic - suche spezielles Programm

  • Samstag, 1. September 2012 09:54
     
     

    Hey Leute,

    ich möchte gern mit Visual Basic ein Programm schreiben, welches eine bestimmte Farbveränderung in einem Browserfenster erkennt. Beispiel: Im Internet Explorer befindet sich eine Ampel. Wenn diese auf grün schaltet, soll das Programm es erkennen und beispielsweise ein Click ausführen. Somit ist es wichtig, dem Programm zu sagen, wo es die Farbveränderung erkennen sollen auf dem Bildschirm. Alternativ besteht vllt die Möglichkeit, dass das Programm erkennt, wenn die Ursprungsfarbe an diesem bestimmten Punkt nicht mehr vorhanden ist.
    Wichtig ist auch noch, dass das Programm sich ein und ausschalten lässt.

    Ich kenn mich leider nicht sooo gut aus mit dem Programmieren von Programmen. Ich dachte da irgendwie an eine if/else Formel. Also wenn dies passiert, soll das gesehen. Ähnlich wie bei Excels WENN Funktion.

    Ich hoffe Ihr könnt mir weiterhelfen. Ich freue mich auf Eure Programmiervorschläge :)

    Vielen Dank schon mal im voraus.

Alle Antworten

  • Samstag, 1. September 2012 10:11
    Moderator
     
     Beantwortet

    Hallo,

    Ich glaube, da müsstest du auf Poling zurück greifen. Also Beispielsweise aller 500ms folgendes Ausführen:

      • Einen Screenshot erstellen
        (Theoretisch würde auch das aktuelle Fenster reichen, ist aber schwieriger mit den Koordinaten)
      • Mit GetPixel die Farbe eines Pixels auslesen
      • Mittels if/else Block überprüfen ob die Farbe stimmt. Achtung, wenn deine "Ampel" die Bilder als JPEG oder GIF verwendet, somit könnte der Browser auch eine Farbe etwas falsch darstellen (Wegen der nicht verlustfreien Komprimierung) Somit beachte eine Gewisse differenz zwischen den je 2 R, G und B Werten.
      • Führe deine Aktion aus

    Mir viele jetzt keine Windows-Message ein, welche eine Farbveränderung zeigt, wobei eine solchige ja schon beim Mausbewegen eintreten würde. Somit ist Polling vielleicht auch mal sinnvoller als Hooks.

    Ich hoffe ich konnte dir etwas weiter helfen.


    Koopakiller - http://koopakiller.ko.ohost.de/

  • Sonntag, 2. September 2012 14:15
     
     

    Vielen Dank erstmal für deine Hilfe. Ich bin im Programme schreiben leider noch nicht so geschult.

    Meinst du, du könntest mir den Code zusammen schreiben ?

    Den Code für den Screenshot und GetPixel hab ich bereits gefunden.

    public Bitmap CaptureScreen()
    {
        Bitmap b = new Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height);
        Graphics g = Graphics.FromImage(b);
        g.CopyFromScreen(0, 0, 0, 0, b.Size);
        g.Dispose();
        return b;
    }
        Public Sub GetPixel_Example(ByVal e As PaintEventArgs)

            ' Create a Bitmap object from an image file.
            Dim myBitmap As New Bitmap("Grapes.jpg")

            ' Get the color of a pixel within myBitmap.
            Dim pixelColor As Color = myBitmap.GetPixel(50, 50)

            ' Fill a rectangle with pixelColor.
            Dim pixelBrush As New SolidBrush(pixelColor)
            e.Graphics.FillRectangle(pixelBrush, 0, 0, 100, 100)
        End Sub

    Die if/else Anwendung bekomm ich nicht hin :(.

  • Sonntag, 2. September 2012 14:23
    Moderator
     
     Beantwortet Enthält Code

    Hallo, mal angenommen, du hast jedetzt 2 Color objekte und die Farben dürften sich in in R, G und B Werten um je um x nach oben oder unten unterscheiden. So könntest du beispielsweise folgenden Code verwenden:

    Public Shared Function Compare(c1 As Color, c2 As Color, inexactness As Byte) As Boolean
    	Return c1.R - inexactness <= c2.R AndAlso c1.R + inexactness >= c2.R AndAlso c1.G - inexactness <= c2.G AndAlso c1.G + inexactness >= c2.G AndAlso c1.B - inexactness <= c2.B AndAlso c1.B + inexactness >= c2.B
    End Function

    Wenn du jedetzt also Compare(c1, c2) aufrufst und false zurück bekommst, so stimmen die Farben nicht, mit deiner angegebenen genauigkeit überein.

    Jetzt musst du nur noch die 3 Codestücke zusammen "machen".


    Koopakiller - http://koopakiller.ko.ohost.de/

  • Mittwoch, 10. Oktober 2012 14:24
    Besitzer
     
     

    Hallo Plenium,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert


    Robert Breitenhofer, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.