编写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键就能开关反截图功能了