我面临两难的境地。我已经将我的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/