QuickTest Pro: Hintergrundfarbe ermitteln

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
0 Antworten

Hinterlassen Sie einen Kommentar

Wollen Sie an der Diskussion teilnehmen?
Feel free to contribute!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.