内容目录
背景
因为看到gameviewer 有隐私屏幕这个功能,自己互联网找一下资料,于是自己写了这个工具,方便自己使用parsec使用。
功能
- 一个黑色或者图片窗口遮挡整个屏幕,同时置顶,没有最小化功能
- 远程时候采集不到这个这个窗口,但物理显示器可以看到这个窗口,从而实现隐私功能
技术
- 通过创建透明窗口,这个技术很久之前就有,鼠标能够穿透这个窗口
- SetWindowDisplayAffinity(hWnd, WDA_EXCLUDEFROMCAPTURE) 设置不能被捕获,这个技术可以用防止截屏这个窗口
创建这种窗口代码c++
/// <summary>
/// 创建隐私窗口
/// </summary>
/// <param name="start_x"></param>
/// <param name="start_y"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <returns></returns>
HWND CreatePrivateWnd(int start_x ,int start_y, int width, int height) {
DWORD dwStyle = WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_POPUPWINDOW;
DWORD dwExStyle = WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_TOOLWINDOW | WS_EX_PALETTEWINDOW | WS_EX_LAYERED | WS_EX_COMPOSITED | WS_EX_NOACTIVATE;
HWND hWnd = CreateWindowEx(dwExStyle, szWindowClass, nullptr, dwStyle,
start_x, start_y, width, height, nullptr, nullptr, 0, nullptr);
SetWindowDisplayAffinity(hWnd, WDA_EXCLUDEFROMCAPTURE);
return hWnd;
}
int screenWidth = GetSystemMetrics(SM_CXSCREEN);
int screenHeight = GetSystemMetrics(SM_CYSCREEN);
m_hw_virtual_hwnd = CreatePrivateWnd(0, 0, screenWidth, screenHeight);
软件使用
纯win32开发,静态编译也才 171kb
使用说明
- 第一次试用建议点击 创建饮食窗口(10自动关闭),这个完全测试试用,10秒后就关闭,千万不要点击直接点击开启隐私屏幕(如果你没有远程的话,不然就被遮挡了)
- 开启隐私屏幕,建议在远程时候点击,如果你本机直接点开就会被遮挡,那么你就只能强制重启电脑了,建议这个时候手机可以远程,这点击关闭隐私按钮就可以(点击开启隐私屏幕的按钮后就变成关闭隐私按钮)
- 设置背景,选择背景图片,然后点击设置背景图片,然后点击开始隐私屏幕按钮就可以了,不设置默认是黑色
效果图
电脑上:
手机远程上:
文件下载
https://www.123684.com/s/RHCzVv-qlEl
补充说明
- 没有使用 CreateWindowInBand 用来百分百置顶,我用窗口标志置顶,这种会出现别的置顶窗口显示,测试那个函数,我用了定时器50毫秒置顶一次,这样子兼容性更好,如果CreateWindowInBand ,这个效果更好,但隐藏的api,同时还有权限限制,必须绕过才能使用,网上有对应的代码,我自己用不上
- 我没有阻断用户鼠标点击和移动,感觉没有必要(对于我自己需求来说)
- 背景图片设置后,软件下次启动时候就会用这个背景,算是比较智能的
- 关闭程序也会关闭隐私屏幕
资料
https://bbs.kanxue.com/thread-279475.htm
https://bbs.kanxue.com/thread-273582.htm