Windows 挂钩ExtTextOut(GDIAPI) 你好

Windows 挂钩ExtTextOut(GDIAPI) 你好,windows,hook,gdi,Windows,Hook,Gdi,我正在钩住ExtTextOut API,以便从任何应用程序窗口检索特定位置的文本(例如MS Word中光标/插入符号下的文本)。 在大多数情况下,我能够从ExtTextOut函数中检索文本及其位置 BOOL ExtTextOut( __in HDC hdc, __in int X, __in int Y, __in UINT fuOptions, __in const RECT *lprc, __in LPCTSTR lpString, __in UIN

我正在钩住ExtTextOut API,以便从任何应用程序窗口检索特定位置的文本(例如MS Word中光标/插入符号下的文本)。 在大多数情况下,我能够从ExtTextOut函数中检索文本及其位置

BOOL ExtTextOut(
  __in  HDC hdc,
  __in  int X,
  __in  int Y,
  __in  UINT fuOptions,
  __in  const RECT *lprc,
  __in  LPCTSTR lpString,
  __in  UINT cbCount,
  __in  const INT *lpDx
);
通过以下方式之一检索文本的位置:

  • 它在clipping rect的ExtTextOut函数中指定 参数(const RECT*lprc-它是可选参数)
  • 它被指定为X,Y字符串位置ExtTextOut参数(相对于窗口客户端矩形)
  • 使用提供的用于剪裁区域/路径的API之一(例如GetClipBox/GetClipRgn API),从设备上下文中检索文本周围的矩形

    int GetClipBox( __在HDC中, __输出LPRECT lprc ); int GetClipRgn( __在HDC中, __在HRGN中HRGN );

  • ()

    问题是,在某些应用程序中,这些用于检索文本位置的方法都不起作用。此外,更令人沮丧的是,当使用一些API从设备上下文检索区域/路径时,它会成功返回,并指示该设备上下文没有区域/路径

    我的问题是:

  • 怎么可能没有设备上下文的区域/路径

  • 有没有其他方法来检索文本的位置(或矩形),因为据我所知,它的位置必须在某个地方指定,以便最终在屏幕上绘制它

  • 任何帮助都将不胜感激

    谢谢


    Momico.

    问题可能是由于使用双缓冲绘制的程序造成的吗

    i、 e.文本可能会被提交到一个或多个临时跟单信用证中,然后提交给“真实”跟单信用证


    使用这些工具,您可以获得坐标,但它们并不总是与最终坐标匹配,而且所涉及的HDC可能只存在很短的时间,而不是在窗口/屏幕上看到的。如果应用程序创建内存DC并使用这些函数,您将无法看到写入的文本的x、y。
    然后,您将看到一个bitblt将内存缓冲区转储到窗口DC。更复杂的是,您可以钩住bitblt,在窗口中查看内存DC的相对位置,并可以在bitblt操作中计算文本的位置。

    谢谢您的回答。很有道理,我会检查一下。谢谢彼得,你的回答很有帮助。这不是我昨天在回答中说的吗?:)嗨,利奥,你的回答也一样好,只是这个回答对我来说更具体。所以我选择了这个作为公认的答案。谢谢。听起来你在写一些恶意软件!!!嗯,我不是。没有恶意软件,有恶意使用的软件:)