嗨,我有一个 C++ 代码,尝试将不同窗口的
SetWindowDisplayAffinity()
更改为 WDA_NONE
。然而这个函数返回 False 表明它设置失败。
目标窗口是 NodeJS Electron 应用程序,具有
win.setContentProtection(true);
这是C++代码:
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
HWND hwnd = FindWindow(NULL, L"electronapp");
if (hwnd != NULL) {
DWORD_PTR affinity = WDA_NONE;
BOOL result = SetWindowDisplayAffinity(hwnd, affinity);
if (result) {
std::cout << "Window display affinity set to WDA_NONE successfully." << std::endl;
}
else {
DWORD error = GetLastError();
std::cerr << "Failed to set window display affinity. Error code: " << error << std::endl;
}
}
else {
std::cerr << "Window not found." << std::endl;
}
cin.ignore();
return 0;
}
GetLastError()
函数返回错误代码5
。但是,我尝试了以下选项:
我这段代码做错了什么吗?还是别的什么?
Windows 错误代码
5
是:
// Access is denied.
#define ERROR_ACCESS_DENIED 5L
SetWindowDisplayAffinity
要求:
该窗口必须属于当前进程。
在您的情况下,该窗口属于不同的进程,因此您不能在其上使用
SetWindowDisplayAffinity
。
至于api这么指定的原因:
请参阅文档中的此注释:
该函数和 GetWindowDisplayAffinity 旨在支持新的窗口内容保护功能 Windows 7。此功能使应用程序能够保护自己的 屏幕窗口内容 被捕获或通过复制 一组特定的公共操作系统功能和 API。
(重点是我的)
并且允许您从进程外部覆盖此设置将使其毫无意义。