FeaturesUse CasesPricingDocs
Download
Documentation

Quick guide

The essentials only.

QUICK START

Install GhostDesk on Windows.

Sign in with Google.

Start using your 3-day trial immediately.

PRICING BASICS

Trial includes 10 questions/day.

Paid plans unlock unlimited usage.

India uses Razorpay, international uses Dodo Payments.

CORE FEATURES

Fast AI chat with built-in models.

Voice + OCR available on paid plans.

Overlay is designed for private on-screen usage.

ACCOUNT

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');
}