我面临两难的境地。我已经将我的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进行连接,并在其中添加某些字符串?

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

最佳答案

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

关于c++ - 从注入(inject)过程跟踪HDC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2302069/

10-11 16:05