Отслеживание HDC от введенного процесса
Я сталкиваюсь с настоящей дилеммой. Я ввел свою 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.
Как я уже сказал, я теряю трек с оригинальным h, поскольку строка получает новый DC перед AlphaBlend. Любая идея, как я могу установить соединение с h > h2 с определенной строкой в нем?
Я не знаю, смог ли я правильно объяснить проблему, пожалуйста, спросите, есть ли у вас какие-либо вопросы...
1 ответ
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
в последней функции.