Soll bei einer Automatisierung die Hintergrundfarbe ermittelt werden, gestaltet es sich in QuickTest recht schwierig, wenn es sich nicht um Webseiten oder WPF handelt, da die Hintergrundfarbe bei Win Oberfllächen keine abfragbare Eigenschaft von GUI Objekten ist.
Ein Lösungsansatz ist es, die Hintergrundfarbe über die WinAPI Funktion GetPixel (Beschreibung Microsoft) zu ermitteln. Diese Funktion liefert einen COLORREF Wert zurück. Dieser muss dann nur noch umgerechnet werden. In dem unteren Beispiel verwende ich dazu eine selbstgeschriebene Funktion. Es gibt aber auch einen saubereren Weg an die RGB Werte zu kommen (WinApi Funktionen: GetRValue, GetGValue und GetBValue -> siehe hier)
In diesem Beispiel wird bei dem Windows „Taschenrechner“ (calc, unter Windows 7) die Farbe des Buttons mit und ohne Hover Effekt geprüft.
Vor dem MouseMove hat der Button eine blaue, dannach eine orangene Farbe.
Dim Hintergrundfarbe1, Hintergrundfarbe2 Set Hintergrundfarbe1 = GetRGBValues(GetBackGroundColor(Window("Rechner").WinButton("Button"))) msgbox "Blau: " & Hintergrundfarbe1.Blue & " - Rot: " & Hintergrundfarbe1.Red & " - Grün: " & Hintergrundfarbe1.Green Window("Rechner").WinButton("Button").MouseMove 1,1 Set Hintergrundfarbe2 = GetRGBValues(GetBackGroundColor(Window("Rechner").WinButton("Button"))) msgbox "Blau: " & Hintergrundfarbe2.Blue & " - Rot: " & Hintergrundfarbe2.Red & " - Grün " & Hintergrundfarbe2.Green 'Funktion zum Umrechnen der Werte in RGB Function GetRGBValues(lngRGB) Dim Farbe 'Neues Objekt definieren Set Farbe = new Farbe Farbe.Red = lngRGBAND &HFF& Farbe.Green = (lngRGB AND &H0000FF00&)/256 Farbe.Blue = (lngRGB and &H00FF0000&)/65536 set GetRGBValues = Farbe End Function Function GetBackGroundColor(dlgObject) Extern.Declare micLong, "GetPixel", "gdi32", "GetPixel", micLong, micLong, micLong Extern.Declare micLong, "ReleaseDC", "user32", "ReleaseDC", micLong, micLong Extern.Declare micLong, "GetDC", "user32", "GetDC", micLong Extern.Declare micLong, "SetForegroundWindow", "user32", "SetForegroundWindow", micLong Dim hDCSource, hWndSource, backColor hWndSource = dlgObject.GetROProperty("hwnd") Extern.SetForegroundWindow hWndSource hDCSource = CLng(Extern.GetDC(hWndSource)) backColor = CLng(Extern.GetPixel(hDCSource, CLng(1), CLng(1))) Extern.ReleaseDC hWndSource, hDCSource GetBackGroundColor = backColor End Function Class Farbe Dim Red Dim Green Dim Blue End Class
Begeisterter Entwickler, Trainer und Berater zu allem Themen rund um agile Softwareentwicklung, Softwarequalität und Testautomatisierung.
Gründer und Geschäftsführer der Firma SimplyTest GmbH