1

我正面临着一个两难的境地。我已经将我的 DLL 注入到其他进程中,并从那里挂钩了几个 WinAPI 调用,具体来说是 ExtTextOutW@GDI32、DrawTextExW@GDI32 和 AlphaBlend@Msimg32。现在,问题是当另一个应用程序用这两个 GDI32 函数编写一些东西时,我不知道它出现的确切位置。这是因为包含文本的 DC 使用 AlphaBlend 进行处理,最终也将其放入窗口的 DC。

那么,如何跟踪某些 HDC?在伪代码中,其他应用程序如何将文本绘制到屏幕上:


HDC h = DrawTextW("STRING")

Do something with h. The "STRING" gets new HDC, say h2.

Pass h2 to AlphaBlend, which draws it to the screen.

就像我说的,当字符串在 AlphaBlend 之前获得新的 DC 时,我失去了原始 h 的轨道。任何想法,我如何从 h > h2 与其中的某些字符串建立连接?

我不知道我是否能够正确解释问题,如果您有任何问题,请询问...

4

1 回答 1

0
static BOOL (WINAPI *AlphaBlend_t)(
  HDC           hdcDest,
  int           nXOriginDest,
  int           nYOriginDest,
  int           nWidthDest,
  int           nHeightDest,
  HDC           hdcSrc,
  int           nXOriginSrc,
  int           nYOriginSrc,
  int           nWidthSrc,
  int           nHeightSrc,
  BLENDFUNCTION blendFunction
) = AlphaBlend;

BOOL MyAlphaBlend(
  HDC           hdcDest,
  int           nXOriginDest,
  int           nYOriginDest,
  int           nWidthDest,
  int           nHeightDest,
  HDC           hdcSrc,
  int           nXOriginSrc,
  int           nYOriginSrc,
  int           nWidthSrc,
  int           nHeightSrc,
  BLENDFUNCTION blendFunction
) 
{
    // modify hdcDest to hdcDest2
    return AlphaBlend_t(hdcDest2, ...);
}

这应该够了吧。放入任何代码来修改HDC后一个函数中的。

于 2010-02-20T12:16:27.947 回答