Skip to content

Commit a7a7d7e

Browse files
committed
CloakWindow
Signed-off-by: fufesou <shuanglongchen@yeah.net>
1 parent e80b298 commit a7a7d7e

2 files changed

Lines changed: 1230 additions & 653 deletions

File tree

WindowInjection/dllmain.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,39 @@ const TCHAR* WindowTitle = _T("RustDeskPrivacyWindow");
4141
const TCHAR* ClassName = _T("RustDeskPrivacyWindowClass");
4242
const 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+
4472
typedef 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);
4573
typedef BOOL(WINAPI* SetWindowBand)(HWND hWnd, HWND hwndInsertAfter, DWORD dwBand);
4674
typedef BOOL(WINAPI* GetWindowBand)(HWND hWnd, PDWORD pdwBand);
4775
typedef 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

4978
typedef 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+
287336
DWORD 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

Comments
 (0)