我是维杰..
我正在尝试在运行游戏(反恐精英)时在屏幕上制作十字准线(某种光标)...
所以我这样做了...
#############################
#include<iostream.h>
#include<windows.h>
#include<conio.h>
#include<dos.h>
#include<stdlib.h>
#include<process.h>
#include <time.h>
主函数
{
HANDLE hl = OpenProcess(PROCESS_ALL_ACCESS,TRUE,pid);
//这里pid是Game的进程ID...
HDC hDC = GetDC(NULL);
//这里我为整个屏幕传递了 NULL...
HBRUSH hb=CreateSolidBrush(RGB(0,255,255));
SelectObject(hDC,hb);
POINT p;
while(!kbhit())
{
int x=1360/2,y=768/2;
MoveToEx(hDC,x-20,y,&p);
LineTo(hDC,x+20,y);
SetPixel(hDC,x,y,RGB(255,0,0));
SetPixel(hDC,x-1,y-1,RGB(255,0,0));
SetPixel(hDC,x-1,y+1,RGB(255,0,0));
SetPixel(hDC,x+1,y+1,RGB(255,0,0));
SetPixel(hDC,x+1,y-1,RGB(255,0,0));
MoveToEx(hDC,x,y-20,&p);
LineTo(hDC,x,y+20);
}
cin.get();
return 0;
}
####################################
它工作正常......在桌面上我看到十字线......但我的问题是当我运行游戏时......这里的十字消失了......
所以我认为我没有处理游戏的过程......
所以我将 HANDLE 传递给 GetDC(hl)...
但是 GetDC 只接受 HWND(Handle To Window)...
所以我这样打字...
HWND hl = (HWND)OpenProcess(PROCESS_ALL_ACCESS,TRUE,pid);
并将 hl 传递给 GetDC(hl)...
但是它不起作用...代码有什么问题...
请告诉我如何在进程或游戏的屏幕上制作一个简单的形状...
PS : (我的编译器是 DevCPP 和 OS WinXP SP3....)
最佳答案
您正在做的是尝试融入游戏,这本身就是一项壮举。
我不确定 Counter-Strike 是否运行 OpenGL 或 DirectX(可能取决于您的版本,我已经看到使用两者的引用),但您最好的选择是包装整个 OpenGL/DirectX 上下文/设备和处理命令。然后,您可以在将每一帧发送到屏幕之前用光标绘制一个四边形或三 strip 。
这已经做过很多次了,包括合法应用程序(Morrowind Graphics Extender 和 NWShader)和作弊程序(wallhacks 等)。 Google 在包装游戏的基础知识方面提供了大量提示。
编辑:您可能无法通过获取上下文来完成此操作,因为您需要使用 3d API(或它)。很可能您必须创建一个替代的 OpenGL32.dll 或 d3d8/d3d9.dll 文件,专门适合该游戏和您想要执行的操作。包装整个东西,无论是 OpenGL 还是 D3D,都需要一些时间,因此您可能希望四处寻找已经完成它的代码。您将需要知道要包装的内容以及游戏的运行方式,因此 GLIntercept 或 PIX 等程序会有很大帮助。
关于Windows API编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2750650/