在QTP的帮助文档中,展示了如何调用Windows自身的API来实现更灵活的操作。
以下的方法实现在屏幕上高亮一个矩形区域,来突出被测对象的位置。
' Declare necessary APIs
Extern.Declare micHwnd, "GetDesktopWindow", "User32.DLL", "GetDesktopWindow"
Extern.Declare micULong, "GetWindowDC", "User32.DLL", "GetWindowDC", micHwnd
Extern.Declare micInteger, "ReleaseDC", "User32.DLL", "ReleaseDC", micHwnd, micULong
Extern.Declare micULong, "CreatePen", "Gdi32.DLL", "CreatePen", micInteger, micInteger, micDword
Extern.Declare micInteger, "SetROP2", "Gdi32.DLL", "SetROP2", micULong, micInteger
Extern.Declare micULong, "SelectObject", "Gdi32.DLL", "SelectObject", micULong, micULong
Extern.Declare micULong, "DeleteObject", "Gdi32.DLL", "DeleteObject", micULong
Extern.Declare micULong, "GetStockObject", "Gdi32.DLL", "GetStockObject", micInteger
Extern.Declare micULong, "Rectangle", "Gdi32.DLL", "Rectangle", micULong, micInteger, micInteger, micInteger, micInteger
Function HighlightRect (X, Y, W, H, Times)
' Get the Desktop DC
hDC = Extern.GetWindowDC (Extern.GetDesktopWindow)
' Create a three pixel wide pen
hPen = Extern.CreatePen (6, 3, RGB(0, 0, 0)) ' PS_INSIDEFRAME, 3 , RGB(0, 0, 0)
Extern.SetROP2 hDC, 6 ' hDC, R2_NOT
Extern.SelectObject hDC, hPen
' Use an empty fill
Extern.SelectObject hDC, Extern.GetStockObject (5) ' NULL_BRUSH
' Do the highlight
For i = 0 to Times * 2 + 1
Extern.Rectangle hDC, X, Y, X + W, Y + H
wait 0, 50
Next
' CleanUp
Extern.ReleaseDC Extern.GetDesktopWindow, hDC
Extern.DeleteObject hPen
End Function
QTP本身也封装了对象的Highlight方法,可以通过object.Highlight 来调用。