前阵子由于做一个软件需要用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 options
  CONST RECT *lprc, // optional dimensions
  LPCTSTR lpString, // string
  UINT cbCount,     // number of characters in string
  CONST INT *lpDx   // array of spacing values
);

//DrawText可用于多行输出,计算即将输出的位置等,考虑Tab字符等
int DrawText(
  HDC hDC,          // handle to DC
  LPCTSTR lpString, // text to draw
  int nCount,       // text length
  LPRECT lpRect,    // formatting dimensions
  UINT uFormat      // text-drawing options
);

//
int DrawTextEx(
  HDC hdc, // handle to DC
  LPTSTR lpchText,             // text to draw
  int cchText,                 // length of text to draw
  LPRECT lprc,                 // rectangle coordinates
  UINT dwDTFormat,             // formatting options
  LPDRAWTEXTPARAMS lpDTParams  // more formatting options );

  
PolyTextOut  
函数功能:该函数在指定设备环境下以当前所选的字体和正文颜色绘制多个字符串。
函数原型:BOOL PolyTextOut(HDC hdc, CONST POLYTEXT *pptxt, int cStrings);
TabbedTextOut  
函数功能:该函数将一个字符串写到指定的位置,并按制表位位置数组里的值展开制表符。正文以当前选择的字体、背景色和字体写入。
函数原型:;LONG TabbedTextOut(HDC hdc, int X, int Y, LPCTSTR lpString, int nCount, int nTabPositions, LPINT lpn TabStopPositions, int nTabOrigin);

经过分析拦截的输入文本发现,TextOut实际继续调用了ExtTextOut,因此最后只拦截了ExtTextOut就实现了程序要求。

文本输出API函数:TextOut,ExtTextOut,DrawText,DrawTextEx,PolyTextOut,TabbedTextOut相关推荐

  1. 8.向窗口输出文字 : TextOut 和 DrawText 函数

    使用 DrawText() 向客户区的中间位置输出了一段文本,说一下文字的输出. 设备环境(DC) 在Windows中,一切能在显示器上看到的都是图形,不但包括点.线.矩形.圆等,也包括文字.字体.对 ...

  2. MFC字体与文本输出

    字体 成员函数 1.CFont( ); 构造一个CFont对象.此对象在使用之前应该先使用CreateFont.CreateFontIndirect.CreatePointFont或CreatePoi ...

  3. windows编程之TextOut与DrawText -- 文本输出实验

    文章目录 windows编程之TextOut与DrawText -- 文本输出实验 实验名称 实验目的 实验要求 实验源码 思考题 windows编程之TextOut与DrawText – 文本输出实 ...

  4. 向窗口输出文字--TextOut和DrawText函数

    在< 一个完整的Windows程序框架 >一节中,我们使用 DrawText() 向客户区的中间位置输出了一段文本,但并没有详细解释,这节我们来重点说一下文字的输出. 设备环境(DC) 在 ...

  5. 常用 API 函数(5): 文本和字体函数

    AddFontResource 在Windows系统中添加一种字体资源 CreateFont 用指定的属性创建一种逻辑字体 CreateFontIndirect 用指定的属性创建一种逻辑字体 Crea ...

  6. 三、C语言创建桌面程序:文字的输出 TextOut 和 DrawText

    一.BeginPaint 和 EndPaint 函数 当发生 WM_PAINT事件时,应用程序开始绘图.绘图之前需要先调用 BeginPaint 函数通知 Windows,告诉它当前程序需要使用显示器 ...

  7. MFC 和Windows API的TextOut输出文字

     void CTest1Dlg::OnButton1() { // TODO: Add your control notification handler code here  /*  //MFC ...

  8. Windows API函数大全

    1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同 ...

  9. API函数的中文说明及所有的32位WindowsAPI函数的定义

    API函数的中文说明及所有的32位WindowsAPI函数的定义 ============================API函数的中文说明============================= ...

最新文章

  1. 中国程序员超 5000 万?北上广等一线城市 IT 岗位已开始饱和过剩?
  2. 如何利用数据仓库优化数据分析?
  3. Log4j使用及配置
  4. Valgrind使用说明
  5. Web前端开发css基础样式总结
  6. GenericFactoryMethod泛型工厂模式实现简单IOC功能
  7. ICLR 2019 | 基于复杂空间关系旋转的知识表示方法
  8. 06-基本查询-进阶一
  9. 在java中使用solrj对solr进行CRUD
  10. ARM32/ARM64函数调用规则
  11. Silverlight开源项目与第三方控件收集
  12. SQL Server 2016 bak文件还原
  13. 点滴记录笔记_持续更新
  14. 传输层 可靠传输 连续ARQ协议和滑动窗口协议
  15. COMSOL数据导入的案例
  16. JS中的this是什么,this的四种用法
  17. 提问的艺术,原文链接
  18. STC12C5A60S2自带A/D转换器的使用
  19. 如何破解已签名JAR包
  20. linux twm 窗口调节,CENTOS5.1怎样在命令行模式下改变X窗口启动的方式(TWM)

热门文章

  1. php route,FastRoute
  2. C++ --取出网址中域名和协议名
  3. Solana中的跨合约调用 及 Program Derived Addresses
  4. C++ accumulate
  5. GraphQL标准的Java实现graphql-java概述
  6. 2020 ICM Weekend 1 Problem E: Drowning in Plastic
  7. IO编程,真的很简单
  8. 矩估计和最大似然估计关系
  9. PXE配置中ks.cfg文件介绍
  10. MySQL进阶垫脚石:线程长时间处于killed状态怎么破?