@@ -41,10 +41,39 @@ const TCHAR* WindowTitle = _T("RustDeskPrivacyWindow");
4141const TCHAR* ClassName = _T(" RustDeskPrivacyWindowClass" );
4242const TCHAR* DefaultBmpPath = _T(" C:\\ aa.bmp" );
4343
44+ typedef enum tagDWMWINDOWATTRIBUTE {
45+ DWMWA_NCRENDERING_ENABLED,
46+ DWMWA_NCRENDERING_POLICY,
47+ DWMWA_TRANSITIONS_FORCEDISABLED,
48+ DWMWA_ALLOW_NCPAINT,
49+ DWMWA_CAPTION_BUTTON_BOUNDS,
50+ DWMWA_NONCLIENT_RTL_LAYOUT,
51+ DWMWA_FORCE_ICONIC_REPRESENTATION,
52+ DWMWA_FLIP3D_POLICY,
53+ DWMWA_EXTENDED_FRAME_BOUNDS,
54+ DWMWA_HAS_ICONIC_BITMAP,
55+ DWMWA_DISALLOW_PEEK,
56+ DWMWA_EXCLUDED_FROM_PEEK,
57+ DWMWA_CLOAK,
58+ DWMWA_CLOAKED,
59+ DWMWA_FREEZE_REPRESENTATION,
60+ DWMWA_PASSIVE_UPDATE_MODE,
61+ DWMWA_USE_HOSTBACKDROPBRUSH,
62+ DWMWA_USE_IMMERSIVE_DARK_MODE = 20 ,
63+ DWMWA_WINDOW_CORNER_PREFERENCE = 33 ,
64+ DWMWA_BORDER_COLOR,
65+ DWMWA_CAPTION_COLOR,
66+ DWMWA_TEXT_COLOR,
67+ DWMWA_VISIBLE_FRAME_BORDER_THICKNESS,
68+ DWMWA_SYSTEMBACKDROP_TYPE,
69+ DWMWA_LAST,
70+ } DWMWINDOWATTRIBUTE;
71+
4472typedef HWND (WINAPI* CreateWindowInBand)(_In_ DWORD dwExStyle, _In_opt_ ATOM atom, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam, DWORD band);
4573typedef BOOL (WINAPI* SetWindowBand)(HWND hWnd, HWND hwndInsertAfter, DWORD dwBand);
4674typedef BOOL (WINAPI* GetWindowBand)(HWND hWnd, PDWORD pdwBand);
4775typedef HDWP (WINAPI* DeferWindowPosAndBand)(_In_ HDWP hWinPosInfo, _In_ HWND hWnd, _In_opt_ HWND hWndInsertAfter, _In_ int x, _In_ int y, _In_ int cx, _In_ int cy, _In_ UINT uFlags, DWORD band, DWORD pls);
76+ typedef HRESULT (WINAPI* DwmSetWindowAttribute)(HWND hwnd, DWMWINDOWATTRIBUTE dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute);
4877
4978typedef BOOL (WINAPI* SetBrokeredForeground)(HWND hWnd);
5079
@@ -284,6 +313,26 @@ HWND CreateWin(HMODULE hModule, UINT zbid, const TCHAR* title, const TCHAR* clas
284313 return hwnd;
285314}
286315
316+ // https://github.com/killtimer0/uiaccess/issues/3#issuecomment-1787022010
317+ HRESULT CloakWindow (HWND hwnd, BOOL cloakHwnd) {
318+ HRESULT result;
319+ HMODULE hMod = LoadLibrary (TEXT (" dwmapi.dll" ));
320+ if (hMod) {
321+ DwmSetWindowAttribute pDwmSetWindowAttribute = (DwmSetWindowAttribute)GetProcAddress (hMod, " DwmSetWindowAttribute" );
322+ if (pDwmSetWindowAttribute) {
323+ result = pDwmSetWindowAttribute (hwnd, DWMWA_CLOAK, &cloakHwnd, sizeof (cloakHwnd));
324+ }
325+ else {
326+ result = HRESULT_FROM_WIN32 (GetLastError ());
327+ }
328+ FreeLibrary (hMod);
329+ }
330+ else {
331+ result = HRESULT_FROM_WIN32 (GetLastError ());
332+ }
333+ return result;
334+ }
335+
287336DWORD WINAPI UwU (LPVOID lpParam)
288337{
289338#ifdef WINDOWINJECTION_EXPORTS
@@ -307,6 +356,9 @@ DWORD WINAPI UwU(LPVOID lpParam)
307356 return 0 ;
308357 }
309358
359+ HRESULT res = CloakWindow (g_hwnd, TRUE );
360+ (void )res;
361+
310362 RECT rcClient;
311363 if (FALSE == GetClientRect (g_hwnd, &rcClient))
312364 {
0 commit comments