Plugin Documentation

WindowCast
Live desktop windows as Unreal textures

Capture any desktop application window on Windows in real time and show it as a texture on a mesh in your level or inside a UMG widget.

v1.0
UE 4.27 & 5.8
Win64 only
Category Rendering
Alpha XP

Overview

WindowCast streams the contents of a desktop window into Unreal Engine 4.27 and 5.8 as a regular Texture2D. Capture runs on a background thread through the Windows Graphics Capture API, so the window keeps updating while it is partly covered by other windows. You choose the window by its title, set a frame rate, call Start and receive the texture through the Change Texture event.

  • Capture of any top-level desktop window into a BGRA8 texture.
  • Five title matching modes, from exact match to regular expressions (case-insensitive).
  • Capture rate from 1 to 120 frames per second.
  • A new texture is created and broadcast whenever the captured window changes size.
  • Actor and UMG widget base classes, plus a capture object for custom setups.
  • Sample plane actor and UMG widget with materials.

Requirements

RequirementDetails
Unreal Engine4.27 and 5.8 (verified clean on both)
ModulesWindowCast (Runtime)
DependenciesNone (engine modules only; no other plugins are enabled)
LanguageBlueprints and C++
PlatformsWin64 only (the module is restricted to Win64 in the plugin descriptor; verified by Alpha XP). Capture requires Windows 10 version 1903 or newer; building the plugin requires a Windows 10 SDK 10.0.18362 or newer.

Installation

  1. Install WindowCast from Fab into your engine, or copy the WindowCast folder into your project's Plugins folder.
  2. For a C++ project, regenerate project files and build the editor target.
  3. Open the project, enable WindowCast in Edit > Plugins and restart the editor.
  4. C++ only: the module exists only on Win64, so add it for that platform: if (Target.Platform == UnrealTargetPlatform.Win64) { PrivateDependencyModuleNames.Add("WindowCast"); } and wrap your calls in #if PLATFORM_WINDOWS.
Verifying the installEnable Show Plugin Content in the Content Browser settings: the WindowCast content folder contains PlaneActor/WindowCastPlane and Widget/WindowCastUMG, and AWindowCastActor can be chosen as a Blueprint parent class.

Quick start

On a mesh in the level

  1. Open the window you want to show (for example a text editor) and note its title.
  2. Drag PlaneActor/WindowCastPlane into the level.
  3. In the Details panel, expand Properties, set Capture Target Title (for example Notepad) and choose Title Matching Window Search = Partial Match.
  4. Press Play. The sample calls Start on Begin Play and writes every texture from Change Texture into the Texture parameter of its material.

In a UMG widget

  1. Create Widget/WindowCastUMG (or your own widget whose parent class is UWindowCastWidget) with Create Widget and add it to the viewport.
  2. Set its Properties; the widget graph calls Start and applies the texture from Change Texture to its image.

C++

// Build.cs: if (Target.Platform == UnrealTargetPlatform.Win64) { PrivateDependencyModuleNames.Add("WindowCast"); }
// MyScreen.h:  UPROPERTY() UWindowCastMachine* Capture = nullptr;
//              UFUNCTION() void HandleNewTexture(UTexture2D* NewTexture);
#include "WindowCastMachine.h"

void AMyScreen::BeginPlay()
{
    Super::BeginPlay();
    Capture = NewObject<UWindowCastMachine>(this);
    Capture->Properties.CaptureTargetTitle = TEXT("Notepad");
    Capture->Properties.TitleMatchingWindowSearch = EWindowCastTitleMatch::PartialMatch;
    Capture->Properties.FrameRate = 30;
    Capture->ChangeTexture.AddDynamic(this, &AMyScreen::HandleNewTexture);
    Capture->Start();
}

void AMyScreen::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
    if (Capture)
    {
        Capture->Dispose();
        Capture = nullptr;
    }
    Super::EndPlay(EndPlayReason);
}

Actor & widget

Both classes own a capture object while they run. Start is a protected node: call it from the graph of a Blueprint that derives from the class (as the samples do).

NodeTypeDescription
AWindowCastActorClassActor base class (Blueprintable). Disposes the capture on End Play.
UWindowCastWidgetClassUser Widget base class (Blueprintable). Disposes the capture when its Slate resources are released.
StartCallableStarts (or restarts) capturing the window described by Properties. Returns the current texture, which is empty until the first frame arrives.
Change TextureEventEvent dispatcher with NewTexture; broadcast when a capture texture is created (first frame and every window resize).
PropertiesPropertyFWindowCastProperties used by the next Start.
Texture TargetPropertyRead-only texture reference on the class; use the texture passed to Change Texture for display.

Capture object

NodeTypeDescription
UWindowCastMachineClassObject that finds the window, runs the capture session and updates the texture. Create it with Construct Object from Class (Blueprint) or NewObject (C++) and keep a reference to it.
StartCallableSearches the top-level windows for the title in Properties and starts capturing it. Logs a warning in LogWindowCast when the title is empty or no window matches.
DisposeCallableStops the capture and releases the session. Call it when you no longer need the capture.
Change TextureEventBroadcast with the new texture when it is created or recreated.
Texture TargetPropertyThe current capture texture (BGRA8, sized like the window).
PropertiesPropertyCapture settings, see below.

Capture properties

NodeTypeDescription
FWindowCastPropertiesClassStructure with the three settings below.
Capture Target TitlePropertyText to look for in window titles. Default WindowCast.
Title Matching Window SearchPropertyHow the title is compared (EWindowCastTitleMatch). Default Forward Match.
Frame RatePropertyTexture updates per second, 1 to 120. Default 30.
Perfect MatchEnum valueTitle equals the text.
Forward MatchEnum valueTitle starts with the text.
Partial MatchEnum valueTitle contains the text.
Backward MatchEnum valueTitle ends with the text.
Regular ExpressionEnum valueTitle matches the text as an Unreal regular expression.

All comparisons except Regular Expression ignore letter case. The first window that matches is captured.

Content

AssetTypePurpose
PlaneActor/WindowCastPlaneAssetActor Blueprint (parent AWindowCastActor) that shows the capture on a plane mesh.
PlaneActor/WindowCastPlaneMeshAssetPlane static mesh used by the sample actor.
PlaneActor/WindowCastMatAssetMaterial with a Texture parameter that receives the capture.
PlaneActor/WindowCastDefaultTexAssetTexture shown until the first frame arrives.
Widget/WindowCastUMGAssetWidget Blueprint (parent UWindowCastWidget) that shows the capture in an image.
Widget/WindowCastUMGMatAssetMaterial with a Texture parameter used by the sample widget.
Widget/WindowCastUMGDefaultTexAssetTexture shown in the widget until the first frame arrives.

Troubleshooting

SymptomCause and fix
The default texture stays on screenNo window matched. Check the LogWindowCast log for "Target window not found", correct Capture Target Title or use Partial Match. The window is searched once per Start: if it was opened later, call Start again.
"CaptureTargetTitle is empty" in the logSet Capture Target Title before calling Start.
The image freezes after the window is resizedA new texture is created on resize. Always display the texture passed to Change Texture instead of keeping the first one.
The wrong window is capturedSeveral windows match; the first match wins. Use Perfect Match or a Regular Expression that is specific to the window.
Nothing is captured on a target PCWindow capture needs Windows 10 version 1903 or newer.
Build error about Windows.Graphics.Capture.Interop.hInstall a Windows 10 SDK 10.0.18362 or newer and rebuild.
A game module fails to build for other platformsWindowCast exists only on Win64. Add the module dependency only for Win64 and guard the code with #if PLATFORM_WINDOWS.
A coloured border appears around the captured windowThe border is drawn by Windows while a window is being captured; the plugin uses the default capture session settings.

Credits

© 2026 Alpha XP — alphaxp.net · Support: support@alphaxp.net. Built and verified for Unreal Engine 4.27 and 5.8.