Hook DirectX的Present方法,在其中使用DrawPrimitive画图无效
风之空 2019-08-28 04:46:41 目标:注入DirectX,利用DrawPrimitive,在游戏中画一个矩形
问题:DrawPrimitive未生效
过程:利用Detour Hook掉Present方法,在MyPresent中绘制矩形,主要绘制过程代码如下:
HRESULT hr = pDevice->CreateVertexBuffer(6 * sizeof(Vector), 0, D3D_FVF_VECTOR, D3DPOOL_SYSTEMMEM, &vectex_buffer9, NULL);
if (FAILED(hr)) {
OutputDebugString(L"Return 1\n");
return false;
}
Vector *vectors;
vectex_buffer9->Lock(0, 0, (void**)&vectors, 0);
//创建Rectangle
vectors[0] = Vector(220, 340, 0, D3DCOLOR_ARGB(127, 0, 200, 255));
vectors[1] = Vector(220, 140, 0, D3DCOLOR_ARGB(127, 0, 200, 255));
vectors[2] = Vector(420, 140, 0, D3DCOLOR_ARGB(127, 0, 200, 255));
vectors[3] = Vector(220, 340, 0, D3DCOLOR_ARGB(127, 0, 200, 255));
vectors[4] = Vector(420, 140, 0, D3DCOLOR_ARGB(127, 0, 200, 255));
vectors[5] = Vector(420, 340, 0, D3DCOLOR_ARGB(127, 0, 200, 255));
vectex_buffer9->Unlock();
hr = pDevice->SetStreamSource(0, vectex_buffer9, 0, sizeof(Vector));
hr = pDevice->SetFVF(D3D_FVF_VECTOR);
hr = pDevice->BeginScene();
OutputDebugString(L"Start DrawPrimitive");
hr = pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
//hr = pDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
if (FAILED(hr)) {
OutputDebugString(L"DrawPrimitive failed");
}
hr = pDevice->EndScene();