Quick guide
The essentials only.
— Install GhostDesk on Windows.
— Sign in with Google.
— Start using your 3-day trial immediately.
— Trial includes 10 questions/day.
— Paid plans unlock unlimited usage.
— India uses Razorpay, international uses Dodo Payments.
— Fast AI chat with built-in models.
— Voice + OCR available on paid plans.
— Overlay is designed for private on-screen usage.
— One email is linked to one machine.
— Device transfer is handled by email link.
— Short offline usage window is supported.
Under the Hood: Technical Reference (DWM Capture Exclusion)
GhostDesk is built for developers who care about how their system works. Below is the technical reference for how we implement OS-level screen capture protection, and how you can replicate this behavior in your own Electron applications.
1. The Windows API: SetWindowDisplayAffinity
To exclude a window from screen capture, screen sharing, and recording software, GhostDesk calls the Win32 API SetWindowDisplayAffinity.
By passing the flag WDA_EXCLUDEFROMCAPTURE (value: 0x00000011), the Windows Desktop Window Manager (DWM) excludes the window from all capture pipelines. This ensures that recording utilities, Zoom, Teams, Meet, and OBS Studio receive a completely blank or transparent rect for this window's area.
- Supported OS: Windows 10 (build 19041 / version 2004) and later.
- Prior Windows builds: Fall back to
WDA_MONITOR(value:0x00000001).
2. Electron Implementation (setContentProtection)
In Electron, you can invoke this API wrapper directly on a BrowserWindow instance using the setContentProtection(enable) method.
const { app, BrowserWindow } = require('electron');
const os = require('os');
function createWindow() {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
alwaysOnTop: true,
});
// Apply OS-level content protection
if (process.platform === 'win32') {
const buildNumber = parseInt(
os.release().split('.')[2],
10
);
// Supported in build 19041+
if (buildNumber >= 19041) {
mainWindow.setContentProtection(true);
}
}
mainWindow.loadURL('https://your-app.com');
}