Repository navigation
Releases: NGxDTV/NGMemory
Release list
NGMemory v1.0.8
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
CaptureMaskControlfor 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
docsfolder with examples for almost every public feature - Version bump to
1.0.8
Getting Started
Build from source:
dotnet build NGMemory.slnReference 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_TRANSPARENTWS_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.mddocs/quick-start.mddocs/easy-api.mddocs/capture-protection.mddocs/overlays.mddocs/memory-scanner-debug.mddocs/wininterop-tools.mddocs/screen-analysis.mddocs/troubleshooting.mddocs/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
SetWindowDisplayAffinityonly works on top-level windows owned by the current process.- It does not protect normal child controls individually.
WDA_EXCLUDEFROMCAPTUREis 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
ReturnValueandWin32Error
Thanks for using NGMemory. Happy coding.
NGMemory v1.0.7
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.7Add 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
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
- Download NGMemory.dll from the Assets below.
- Add it to your C# project.
- 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(andEasyPressKey.PressKeys) is an RDP‑safe, unattended replacement for classicSendKeys. - 🔑 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
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
- Download the
NGMemory.dllfile from the Assets section below. - Add it to your C# project.
- 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
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
- Download the
NGMemory.dllfile from the Assets section below. - Add it to your C# project.
- 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
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
- Download the
NGMemory.dllfile from the Assets section below. - Add it to your C# project.
- 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! 💻