일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- opencv web
- mailer
- QT
- KMS 인증
- qt 스타일시트
- 콘솔만들기
- 그누보드
- 구글 소셜로그인
- 화면 녹화
- opencv.js
- OpenCV
- High DPI
- 코스톰 윈도우
- 소셜로그인 연동해제
- 오피스 KMS 인증
- 관리자 메일발송
- 목공
- Qt 버그
- 코너 라운드 윈도우
- Qt 캡쳐
- Qt 관리자 권한
- 투명 윈도우
- 윈도우 단축키
- 투명창
- 영상처리
- aruco
- High DPI 적용
- 스크린 녹화
- 투명윈도우
- 셀프인테리어
- Today
- Total
IT 알쓸신잡
Qt 화면 녹화 & 캡쳐 방지 본문
Windows API 함수 중에 SetWindowDisplayAffinity 함수가 있습니다.
SetWindowDisplayAffinity function (winuser.h) - Win32 apps | Microsoft Learn
SetWindowDisplayAffinity function (winuser.h) - Win32 apps
Stores the display affinity setting in kernel mode on the hWnd associated with the window.
learn.microsoft.com
Microsoft 개발자 문서를 참고하면, 첫번째 인자는 윈도우 핸들 / 두번째 인자는 옵션 / 결과는 bool 형태로 리턴됩니다.
BOOL SetWindowDisplayAffinity(
[in] HWND hWnd,
[in] DWORD dwAffinity
);
첫번째 인자인 윈도우 핸들은,
A handle to the top-level window. The window must belong to the current process.
최상위 핸들이어야 하고, 이 함수를 사용하는 건 같은 프로세스 내에서만 사용이 가능하다고 하는군요.
두번째 인자인 dwAffinity를 확인해 보면,
- WDA_NONE : 녹화 & 캡쳐 방지 해제
- WDA_MONITOR : 녹화 & 캡쳐 방지 적용 ( 녹화 & 캡쳐 시 창 내부가 검은색으로 나옴)
- WDA_EXCLUDEFROMCAPTURE : 녹화 & 캡쳐 방지 적용 ( 창이 아예 안보임, Windows 10 이후)
이 함수를 Qt 에 적용해서 사용해 보도록 하겠습니다.
1. 프로젝트를 생성 후 .pro 파일에서 함수를 사용하기 위한 라이브러리를 추가합니다.
LIBS += -luser32 \
-lgdi32
2. 헤더 파일을 로드 합니다.
#include <Windows.h> //Qt에서 윈도우 관련 헤더
#include "WinUser.h"
3. 함수 사용
HWND hwnd = reinterpret_cast<HWND>(this->winId());
if(hwnd == NULL ) qDebug() << "hwnd null~~~";
bool ret = SetWindowDisplayAffinity(hwnd, WDA_MONITOR);
qDebug() << "result : " << ret;
- 첫번째 줄 : 현재 dialog(widget)의 winId를 Windows API HWND 변수로 형변환.
- 두번째 줄 : HWND 변수가 null일 경우 디버깅
- 세번째 줄 : SetWindowDisplayAffinity 함수 호출
- 네번째 줄 : 함수 호출 결과 확인
윈도우 핸들에 대한 형변환만 주의하면 사용법은 되게 쉽습니다.
적용 결과 |
Push 버튼 두 개를 추가하여 녹화&캡쳐 방지 사용 / 해제가 되도록 간단하게 프로그램 했습니다.
사용 시에는 검은색으로 방지가 되며 해제 시에는 캡쳐가 됩니다. 스크린 녹화 시에도 동일합니다.
이번엔 child dialog를 만들어서 적용이 되는지 확인해 봤습니다.
하지만 중요한 제한 사항이 있습니다!!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/046.gif)
아래 함수는 Qt에서 윈도우의 Attribute를 투명으로 설정하는 함수입니다.
setAttribute(Qt::WA_TranslucentBackground);
투명을 적용할 경우 SetWindowDisplayAffinity 함수가 적용이 안되며 false를 리턴합니다..
커스텀 모양의 윈도우를 만들 경우에는 사용이 안되겠군요ㅠㅠ
이 부분을 유념하여 내가 만든 프로그램에 녹화&캡쳐 방지를 잘 활용하도록 합시다^^
'Development' 카테고리의 다른 글
Qt Custom 윈도우 만들기 (0) | 2023.02.28 |
---|---|
Qt 투명 윈도우 만들기 (0) | 2023.02.28 |
Qt 에서 한글 출력 에러 & 깨짐 해결 방법 (0) | 2023.02.21 |
OpenCV를 Web에서 구현해보자 - 2 (0) | 2023.02.07 |
OpenCV를 Web에서 구현해보자 - 1 (0) | 2023.02.06 |