R3注入反截图

编写Dll 设置F2键开关反截图

cpp 复制代码
#include "pch.h"
#include <windows.h>

#ifndef WDA_NONE
#define WDA_NONE 0x00000000
#endif
#ifndef WDA_EXCLUDEFROMCAPTURE
#define WDA_EXCLUDEFROMCAPTURE 0x00000011
#endif

HWND g_hWnd = nullptr;
bool g_bAntiCapture = false;   // 当前是否开启反截图

BOOL CALLBACK EnumWndProc(HWND hWnd, LPARAM)
{
    DWORD pid = 0;
    GetWindowThreadProcessId(hWnd, &pid);

    if (pid == GetCurrentProcessId() && IsWindowVisible(hWnd))
    {
        g_hWnd = hWnd;
        return FALSE;
    }
    return TRUE;
}

DWORD WINAPI AntiCaptureThread(LPVOID)
{
    // 等窗口创建
    for (int i = 0; i < 50 && !g_hWnd; i++)
    {
        EnumWindows(EnumWndProc, 0);
        Sleep(100);
    }

    if (!g_hWnd)
    {
        MessageBoxW(NULL, L"未找到目标窗口", L"提示", MB_OK | MB_ICONWARNING);
        return 0;
    }

    bool lastKeyDown = false;

    while (true)
    {
        SHORT keyState = GetAsyncKeyState(VK_F2);
        bool keyDown = (keyState & 0x8000) != 0;

        // F2 从"未按下"到"按下"的瞬间
        if (keyDown && !lastKeyDown)
        {
            g_bAntiCapture = !g_bAntiCapture;

            if (g_bAntiCapture)
            {
                if (SetWindowDisplayAffinity(g_hWnd, WDA_EXCLUDEFROMCAPTURE))
                {
                    MessageBoxW(NULL, L"反截图已开启", L"提示", MB_OK);
                }
                else
                {
                    MessageBoxW(NULL, L"反截图开启失败", L"错误", MB_OK | MB_ICONERROR);
                }
            }
            else
            {
                SetWindowDisplayAffinity(g_hWnd, WDA_NONE);
                MessageBoxW(NULL, L"反截图已关闭", L"提示", MB_OK);
            }
        }

        lastKeyDown = keyDown;
        Sleep(50); // 降低 CPU 占用
    }

    return 0;
}

BOOL APIENTRY DllMain(HMODULE hModule,DWORD reason,LPVOID)
{
    if (reason == DLL_PROCESS_ATTACH)
    {
        DisableThreadLibraryCalls(hModule);
        HANDLE h = CreateThread(nullptr, 0, AntiCaptureThread, nullptr, 0, nullptr);
        if (h) CloseHandle(h);
    }
    return TRUE;
}

编译dll

注入到测试进程中

按下F2键就能开关反截图功能了

相关推荐
汉克老师3 小时前
GESP2025年3月认证C++五级( 第三部分编程题(2、原根判断))
c++·算法·模运算·gesp5级·gesp五级·原根·分解质因数
winner88813 小时前
从零吃透C++命名空间、std、#include、string、vector
java·开发语言·c++
AI进化营-智能译站4 小时前
ROS2 C++开发系列07-高效构建机器人决策逻辑,运算符与控制流实战
开发语言·c++·ai·机器人
winner88814 小时前
C++ 命名空间、虚函数、抽象类、protected 权限全套通俗易懂精讲(附与 Java 对比)
java·开发语言·c++
不会编程的懒洋洋4 小时前
C# P/Invoke 基础
开发语言·c++·笔记·安全·机器学习·c#·p/invoke
24白菜头4 小时前
【无标题】
c++·笔记·学习·harmonyos
charlie1145141915 小时前
嵌入式C++实践开发第21篇(单片机实践):按钮输入 —— 硬件原理、消抖与HAL API
开发语言·c++·单片机
AKDreamer_HeXY5 小时前
QOJ 12255 - 36 Puzzle 题解
数据结构·c++·数学·算法·icpc·qoj
AI进化营-智能译站5 小时前
ROS2 C++开发系列13-运算符重载让ROS2消息处理更自然
java·开发语言·c++·ai
zhouwy1135 小时前
Poco 与 libevent 网络编程
c++