2010-02-20 3 views
1

나는 꽤 딜레마에 직면하고 있습니다. 내 DLL을 다른 프로세스에 넣었을뿐 아니라 WinAPI 호출, ExtTextOutW @ GDI32, DrawTextExW @ GDI32 및 AlphaBlend @ Msimg32를 구체적으로 연결했습니다. 이제 문제는 다른 응용 프로그램에서 두 개의 GDI32 함수를 사용하여 뭔가를 쓸 때 정확한 위치를 알 수 없다는 것입니다. 이것은 텍스트를 포함하고있는 DC가 AlphaBlend로 처리되어 결국 윈도우의 DC에 저장되기 때문입니다.주입 된 프로세스에서 HDC 추적

그럼 어떻게 특정 HDC를 추적 할 수 있습니까? 내가 말했듯이 문자열이 AlphaBlend 전에 새로운 DC를수록


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> h2에서 특정 문자열로 연결할 수 있습니까? 트릭을 어떻게해야 당신이 질문을 가지고 있는지 문의하시기 바랍니다, 제대로 문제를 설명 할 수 있다면 나도 몰라

...

+0

이러한 호출을 연결할 수 있다면, 실제 'Win32 API'와 다른 'HDC'를 후크에서 전달하지 못하게하는 것은 무엇입니까? – dirkgently

답변

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을 수정할 수있는 코드를 입력하십시오.