前阵子由于做一个软件需要用Detour库HOOK其它程序的文本输出,以实现对第三方程序文字的监控。
对这六个文本输出API函数:TextOut,ExtTextOut,DrawText,DrawTextEx,PolyTextOut,TabbedTextOut,作了一番学习。
以前只是使用,HOOK以后才发现它们有很大的不同。
// TextOut(分为TextOutA及TextOutW)
//仅可输出单行文字
BOOL TextOut(
HDC hdc, // handle to DC
int nXStart, // x-coordinate of starting position
int nYStart, // y-coordinate of starting position
LPCTSTR lpString, // character string
int cbString // number of characters
);
//而ExtTextOut进一步,多了fuOptions及lprc, lpDx参数, 可利用这3个参数进行剪切,遮挡等操作
BOOL ExtTextOut(
HDC hdc, // handle to DC
int X, // x-coordinate of reference point
int Y, // y-coordinate of reference point
UINT fuOptions, // text-output opt