15,979
社区成员
发帖
与我相关
我的任务
分享
HRESULT WINAPI InitInterface(GUID FAR *lpGUID, LPDIRECTDRAW *lplpDD, IUnknown FAR *pUnkOuter)
{
HRESULT hResult = -1;
HINSTANCE gl_hOriginalDll = LoadLibraryA("origddraw.dll");
if (gl_hOriginalDll)
{
FARPROC pProcAddr = GetProcAddress(gl_hOriginalDll,"DirectDrawCreate");
__asm
{
push pUnkOuter
push lplpDD
push lpGUID
Call [pProcAddr]
mov hResult,eax
}
}
return hResult;
}
/* HOOK */
void WINAPI TDirectDraw(void **ppvObj )
{
g_pDirectDraw = new proxyIDirectDraw((LPDIRECTDRAW4)*ppvObj);
*ppvObj = (void*) g_pDirectDraw;
}
HRESULT __stdcall proxyIDirectDraw::CreateSurface( LPDDSURFACEDESC2 lpDDSurfaceDesc2,LPDIRECTDRAWSURFACE4 FAR* lplpDDSurface,IUnknown FAR* pUnkOuter )
{
HRESULT hResult = origIDirectDraw->CreateSurface(lpDDSurfaceDesc2,lplpDDSurface,pUnkOuter);
if(lpDDSurfaceDesc2->ddsCaps.dwCaps== 0x200)//主表面
{
HDC hdc;
g_lpDDSPrimary = *lplpDDSurface;
g_lpDDSPrimary->GetDC(&hdc);
SetBkColor(hdc,0);
SetTextColor(hdc,RGB(255,255,1));
TextOutA(hdc,0,0, "写屏....",8);
g_lpDDSPrimary->ReleaseDC(hdc);
}
}