我正在尝试编写一些代码来检测游戏的wallhack.基本上,存在一些创建窗口空气透明窗口的黑客攻击,并且它们将黑客攻击到该外部窗口,因此无法通过截取游戏本身的屏幕截图来检测它.
我现在的方法是 - 1.截取游戏窗口的截图.2.为相同的坐标拍摄Windows桌面的屏幕截图.3.执行图像分析以比较屏幕截图1和屏幕截图2以查看是否存在差异.
我的问题是屏幕截图1和屏幕截图2不是同时执行的,因此可以在两个屏幕截图之间绘制新的游戏帧,从而在比较图像时导致误报.
我想知道是否有办法协调屏幕截图,以便它们完全同时发生?或以某种方式停止屏幕绘制任何新帧,直到我的截图完成?
这是我用于截取屏幕截图的代码.请注意,我甚至尝试通过排队两个工作项来并行拍摄2个屏幕截图.但是,即使这样也不会导致屏幕截图在同一时间发生.所以我想知道是否有某种方法可以阻止任何进一步的更新屏幕从显卡到屏幕截图结束?或者我能做到的任何其他方式?
public void DoBitBlt(IntPtr dest, int width, int height, IntPtr src)
{
GDI32.BitBlt(dest, 0, 0, width, height, src, 0, 0, GDI32.SRCCOPY);
}
public struct Windows
{
public Bitmap window;
public Bitmap desktop;
}
public Windows CaptureWindows(IntPtr window, IntPtr desktop, User32.RECT coords)
{
Windows rslt = new Windows();
// get te hDC of the target window
IntPtr hdcSrcWindow = User32.GetWindowDC(window);
IntPtr hdcSrcDesktop = User32.GetWindowDC(desktop);
// get the size
int width = coords.right - coords.left;
int …Run Code Online (Sandbox Code Playgroud) 要求是计算 C# 中滚动窗口的最大回撤,例如返回的时间序列。即在每次新观察时,我们重新计算新时间窗口的最大回撤。