Skip to content

Releases: NGxDTV/NGMemory

NGMemory v1.0.8

Choose a tag to compare

@NGxDTV NGxDTV released this 30 Apr 08:14

NGMemory v1.0.8 Release Notes

Hey there! Welcome to NGMemory v1.0.8.

This release adds a reusable Windows screen-capture protection toolkit on top of SetWindowDisplayAffinity, including a designer-editable Protected Area control, click-through masking, black capture masks, and full documentation with copyable test snippets.

What's Included?

  • Windows screen-capture protection helpers for top-level windows
  • Reusable CaptureMaskControl for WinForms projects
  • Programmatic Protected Area API for custom UI
  • Black screenshot masking via WDA_MONITOR
  • Click-through/no-activate protected areas
  • Visible demo modes for placeholder text and simulated blur
  • Full docs folder with examples for almost every public feature
  • Version bump to 1.0.8

Getting Started

Build from source:

dotnet build NGMemory.sln

Reference the generated DLL from NGMemory\bin\Debug or NGMemory\bin\Release.

Add the namespaces you need:

using NGMemory;
using NGMemory.Easy;
using NGMemory.Overlay;
using NGMemory.CaptureProtection;
using NGMemory.WinInteropTools;

Full docs:

docs/index.md

What's New in 1.0.8?

Screen-Capture Protection API

EasyWindow now exposes simple helpers around SetWindowDisplayAffinity:

using NGMemory.Easy;

var result = EasyWindow.SetCaptureProtection(this.Handle, true);

Console.WriteLine(result.Affinity);
Console.WriteLine(result.ReturnValue);
Console.WriteLine(result.Win32Error);

EasyWindow.ClearCaptureProtection(this.Handle);

You can also choose the exact affinity:

EasyWindow.SetDisplayAffinity(this.Handle, WindowDisplayAffinity.None);
EasyWindow.SetDisplayAffinity(this.Handle, WindowDisplayAffinity.Monitor);
EasyWindow.SetDisplayAffinity(this.Handle, WindowDisplayAffinity.ExcludeFromCapture);

Designer-Editable Protected Area Control

The new CaptureMaskControl is a WinForms UserControl with a .Designer.cs, so you can open and edit it in Visual Studio.

using System.Windows.Forms;
using NGMemory.CaptureProtection;

public partial class MainForm : Form
{
    private readonly CaptureMaskControl maskControl = new CaptureMaskControl();

    public MainForm()
    {
        InitializeComponent();

        maskControl.Dock = DockStyle.Right;
        maskControl.Width = 380;
        Controls.Add(maskControl);

        maskControl.BindToOwner(this);
    }
}

The control can create a movable Protected Area and provides UI for:

  • X/Y position
  • width/height
  • border thickness
  • opacity, including 0
  • topmost mode
  • owner-bound or desktop positioning
  • mouse interaction on/off
  • effect selection
  • affinity/debug status

Black Capture Mask Mode

The Schwarz mode is the robust screenshot masking mode.

Recommended settings:

Effect: Schwarz
Opacity: 0
Mausinteraktion aktiv: false
Maske vor Capture schuetzen: true

Behind the scenes, NGMemory keeps a tiny internal opacity when required so Windows still has a real window surface for capture replacement, while normal usage remains almost invisible.

Click-Through Protected Areas

When mouse interaction is disabled, the protected area uses native extended window styles:

  • WS_EX_TRANSPARENT
  • WS_EX_NOACTIVATE

That lets the user interact with windows underneath as if the protected area was not there.

var model = new CaptureMaskViewModel
{
    X = 200,
    Y = 150,
    Width = 480,
    Height = 260,
    Effect = CaptureMaskEffect.Black,
    ProtectFromCapture = true,
    OpacityPercent = 0,
    AllowInteraction = false,
    TopMost = true
};

var manager = new ProtectedAreaManager(this, model);
manager.Create();

Programmatic Protected Area API

You can build your own UI and still reuse the core logic:

using NGMemory.CaptureProtection;

CaptureMaskViewModel model = new CaptureMaskViewModel
{
    X = 100,
    Y = 100,
    Width = 400,
    Height = 220,
    Effect = CaptureMaskEffect.Black,
    ProtectFromCapture = true,
    OpacityPercent = 0,
    AllowInteraction = false
};

ProtectedAreaManager manager = new ProtectedAreaManager(this, model);
manager.Create();

// Move it later:
model.X = 300;
model.Y = 200;

// Remove it:
manager.Remove();

Placeholder And Blur Demo Modes

Placeholder-Text and Simulierter Blur are included as visible demo modes.

Important: normal Win32 APIs cannot create screenshot-only text or real blur over arbitrary foreign windows while keeping it invisible to the user. These modes draw real visible pixels, so screenshot tools can capture them.

model.Effect = CaptureMaskEffect.PlaceholderText;
model.ProtectFromCapture = false;
model.BorderOnlyForUser = false;
model.OpacityPercent = 90;
model.Effect = CaptureMaskEffect.SimulatedBlurDemoOnly;
model.ProtectFromCapture = false;
model.BorderOnlyForUser = false;
model.OpacityPercent = 90;

Full Documentation Folder

The new docs folder includes:

  • docs/index.md
  • docs/quick-start.md
  • docs/easy-api.md
  • docs/capture-protection.md
  • docs/overlays.md
  • docs/memory-scanner-debug.md
  • docs/wininterop-tools.md
  • docs/screen-analysis.md
  • docs/troubleshooting.md
  • docs/api-reference.md

Example: Protect A Form From Capture

using System;
using System.Windows.Forms;
using NGMemory.Easy;

public partial class MainForm : Form
{
    private void protectButton_Click(object sender, EventArgs e)
    {
        var result = EasyWindow.SetCaptureProtection(this.Handle, true);

        MessageBox.Show(
            "Return: " + result.ReturnValue +
            "\nWin32: " + result.Win32Error +
            "\nAffinity: " + result.Affinity);
    }

    private void unprotectButton_Click(object sender, EventArgs e)
    {
        EasyWindow.ClearCaptureProtection(this.Handle);
    }
}

Example: Add The Protected Area UI To A Panel

using NGMemory.CaptureProtection;

CaptureMaskControl captureMaskControl = new CaptureMaskControl
{
    Dock = DockStyle.Fill
};

captureMaskPanel.Controls.Add(captureMaskControl);
captureMaskControl.BindToOwner(this);

Example: Create A Black Click-Through Mask

using NGMemory.CaptureProtection;

var model = new CaptureMaskViewModel
{
    X = 250,
    Y = 250,
    Width = 500,
    Height = 240,
    Effect = CaptureMaskEffect.Black,
    ProtectFromCapture = true,
    OpacityPercent = 0,
    AllowInteraction = false,
    TopMost = true
};

var manager = new ProtectedAreaManager(this, model);
manager.Create();

Notes And Limits

  • SetWindowDisplayAffinity only works on top-level windows owned by the current process.
  • It does not protect normal child controls individually.
  • WDA_EXCLUDEFROMCAPTURE is correctly supported starting with Windows 10 version 2004.
  • Protection does not stop camera recordings, special drivers, kernel capture, or privileged capture tools.
  • Real blur of foreign windows is not reliably possible with normal Win32/WinForms APIs.

Feedback & Support

Found a bug or have an idea? Open an issue and include:

  • Windows version
  • capture tool used
  • affinity mode
  • whether the window is owned by your process
  • ReturnValue and Win32Error

Thanks for using NGMemory. Happy coding.

NGMemory v1.0.7

Choose a tag to compare

@NGxDTV NGxDTV released this 23 Apr 09:17
dc505b0

Hey there! 👋 Welcome to NGMemory v1.0.7! 🚀

NGMemory is your Windows-only .NET Framework helper library for external process-memory work, GUI automation, screen analysis, debugging utilities, and lightweight overlays. Whether you are inspecting memory, automating classic desktop tools, or building a small diagnostics overlay, this release makes the workflow more complete and more reliable.

What's Included?

📖 Read and write memory in external processes with typed helpers.

🔍 Scan process memory for byte patterns with wildcard support.

⚡ Use debugging helpers for hardware breakpoints and register inspection.

🖱️ Automate external UIs: buttons, text boxes, combo boxes, check boxes, list views, menus, keyboard, and mouse input.

🖼️ Capture windows or regions, search colors, and compare images.

🧩 Create lightweight overlays that attach to target windows.

Getting Started

Download NGMemory.dll from the release assets or install it from NuGet:

Install-Package NGMemory -Version 1.0.7

Add the library to your C# project:

using NGMemory;
using NGMemory.Easy;
using NGMemory.Overlay;
using NGMemory.WinInteropTools;

Full guide and examples: https://github.com/NGxDTV/NGMemory

What's New in 1.0.7?

✅ Complete test harness support

NGMemory_Tests now works as a real WinForms test harness for the library. It includes self-tests, process/window selection, external target checks, control-id testing, list view checks, screen helpers, memory tests, and overlay creation/removal.

🎯 Process and window selector

You can select a running process, inspect its windows, run external-window tests, and create overlays for the selected target directly from the test app.

🧩 Overlay improvements

Overlay creation, custom overlay configuration, scan-based overlays, and overlay removal are covered by the test app. OverlayManager.RemoveAllOverlays() was hardened so overlays can be closed safely without modifying the tracked collection during enumeration.

🧠 More robust GUI automation

Control lookup is more reliable for nested WinForms layouts. Helpers can now find controls by id even when they are inside layout containers instead of being direct child windows.

☑️ CheckBox fixes

CheckBox automation now handles WinForms check boxes in the current process correctly while keeping native/external controls on the Win32 message path.

📋 SysListView32 fixes

EasySysListView32.SearchSysListView32InWindow() now searches recursively and recognizes WinForms class names such as WindowsForms10.SysListView32..., not only exact native SysListView32 class names.

⌨️ Input helper fix

InputHelper.CopySelection() now sends WM_COPY synchronously, so clipboard reads after copying are stable instead of racing against a queued message.

🧪 Designer-safe test UI

The test UI layout is now stored in the WinForms Designer file, so Visual Studio can open and edit the form normally.

Examples

Create an overlay for a selected window

var manager = new OverlayManager();

manager.CreateOverlay(targetWindowHandle, overlay =>
{
    overlay.Configure()
        .WithSize(220, 80)
        .WithPosition(OverlayPosition.BottomRight)
        .WithOffset(12, 12)
        .WithLabel("Overlay active", 10, 10, Color.Lime)
        .WithButton("Close", 10, 38, 76, 26, (sender, args) => overlay.Close());
});

Copy selected text from a control

InputHelper.CopySelection(textBoxHandle, false);
string copied = Clipboard.GetText();

Find a nested ListView

IntPtr listView = EasySysListView32.SearchSysListView32InWindow(windowHandle);
int rows = EasySysListView32.GetItemCount(listView);

Feedback & Support

Found a bug or have an idea? Open an issue and let’s make NGMemory even better.

Thanks for exploring NGMemory. Happy coding! 💻✨

NGMemory v1.0.5

Choose a tag to compare

@NGxDTV NGxDTV released this 13 May 16:06

Hey there! 👋 Welcome to NGMemory v1.0.5! 🚀
Your friendly powerhouse for external process-memory work and advanced GUI automation. Debugging, memory exploration, or unattended UI scripting – NGMemory makes it effortless.


What’s Included?

  • 📖 Read & write memory in other processes with a clean API.
  • 🔍 Scan, explore, and patch memory regions precisely.
  • ⚡ Real‑time debugging tools (hardware breakpoints, registers, etc.).
  • 🖱️ Automate external UIs – checkboxes, textboxes, list views, and now nested menu items!

Getting Started

  1. Download NGMemory.dll from the Assets below.
  2. Add it to your C# project.
  3. Start hacking external processes in minutes!
    Full guide & examples → [docs](https://github.com/NGxDTV/NGMemory).

What’s New in 1.0.5?

  • 🗂️ MenuStrip automation – MenuStripHelper.ClickMenu() hits any menu path – even over RDP.
  • 🎹 PressKeys – InputHelper.PressKeys (and EasyPressKey.PressKeys) is an RDP‑safe, unattended replacement for classic SendKeys.
  • 🔑 KeyCode enum – human‑readable key names (KeyCode.LCtrl, KeyCode.C, …).
  • 💎 Misc fixes & performance tweaks.
// Ctrl + C, unattended
InputHelper.PressKeys(false, KeyCode.LCtrl, KeyCode.C);

// Click menu 5 ➜ 7 ➜ 4
MenuStripHelper.ClickMenu(targetWnd, true, 5, 7, 4);

Feedback & Support

Found a bug or have an idea? Open an issue and let’s make NGMemory even better!


Thanks for exploring NGMemory. Happy coding! 💻✨

NGMemory v1.0.3

Choose a tag to compare

@NGxDTV NGxDTV released this 26 Nov 17:17

Hey there! 👋 Welcome to the latest release of NGMemory! 🚀
This C# library is your go-to solution for working with external process memory, combining power and simplicity to make debugging, memory exploration, and real-time interaction effortless.

What’s Included?

  • 📖 Easily read and write memory from other processes.
  • 🔍 Explore, scan, and manipulate memory regions with precision.
  • ⚡ Advanced debugging tools with real-time capabilities.
  • 🖱️ Interact with GUI elements in external applications (e.g., checkboxes, textboxes, and list views).

Getting Started

  1. Download the NGMemory.dll file from the Assets section below.
  2. Add it to your C# project.
  3. Dive into external process memory manipulation with ready-to-use tools!

Need help? Check out the docs for examples and a comprehensive guide.

What’s New?

  • ✅ Added support for checkbox state detection.
  • 📝 GUI text manipulation made simpler with TextBox utilities.
  • 📋 Retrieve and manipulate ListView items in external applications.
  • 🛠️ Fixes and improvements for debugger stability and memory operations.

Feedback & Support

Have questions, ideas, or found a bug? Open an issue and let’s collaborate. Your input helps make NGMemory even better!


Thanks for exploring NGMemory. Happy coding! 💻✨

NGMemory v1.0.2

Choose a tag to compare

@NGxDTV NGxDTV released this 24 Nov 14:57
5b78c59

Hey there! 👋 Welcome to the first release of NGMemory! 🎉
This is a C# library that makes working with external process memory simple and straightforward.
If you’re into debugging or tinkering with memory, this is the tool for you.

What’s Included?

  • 📖 Read and write memory from other processes.
  • 🛠️ Explore and manipulate memory regions.
  • ⚡ Real-time debugging capabilities.

Getting Started

  1. Download the NGMemory.dll file from the Assets section below.
  2. Add it to your C# project.
  3. Start using it to interact with external process memory!

Need help? Check out the docs for examples and guidance.

What’s New?

  • BUG fix for detaching the debugger 🪲
  • VAMemory.WriteBytes as a string

Feedback & Support

If you have ideas, run into issues, or just want to chat, feel free to open an issue. I’d love to hear from you!


Thanks for checking out NGMemory. Happy coding! 💻

NGMemory v1.0.1

Choose a tag to compare

@NGxDTV NGxDTV released this 24 Nov 00:40
8a9c693

Hey there! 👋 Welcome to the first release of NGMemory! 🎉
This is a C# library that makes working with external process memory simple and straightforward.
If you’re into debugging or tinkering with memory, this is the tool for you.

What’s Included?

  • 📖 Read and write memory from other processes.
  • 🛠️ Explore and manipulate memory regions.
  • ⚡ Real-time debugging capabilities.

Getting Started

  1. Download the NGMemory.dll file from the Assets section below.
  2. Add it to your C# project.
  3. Start using it to interact with external process memory!

Need help? Check out the docs for examples and guidance.

What’s New?

This is the very first version (v1.0.1) 🚀. It includes all the essential features to get started, and we’ll be adding more in the future.

Feedback & Support

If you have ideas, run into issues, or just want to chat, feel free to open an issue. I’d love to hear from you!


Thanks for checking out NGMemory. Happy coding! 💻