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