Отслеживание HDC от введенного процесса - PullRequest
1 голос
/ 20 февраля 2010

Передо мной стоит настоящая дилемма. Я ввел свою 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 Ответ

0 голосов
/ 20 февраля 2010
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 в последней функции.

...