 
                                    Blocco screenshot su MAUI.net
In questo articolo tecnico rivolto a sviluppatori .NET e mobile alle prime armi, esploriamo le strategie per bloccare gli screenshot in applicazioni .NET MAUI su Android, iOS, Windows e Web, con esempi di codice e riferimenti a librerie disponibili sul mercato.
Blocco screenshot su MAUI.net
In .NET MAUI è possibile bloccare le catture dello schermo in diversi modi:
- Android sfruttando il flag nativo WindowManagerFlags.SecureoDisplay.FlagSecureper impedire screenshot e registrazioni .
- iOS utilizzando un overlay sfocato (es. UIVisualEffectView) nel ciclo di vita dell’app o affidandosi alle policy di dispositivo in contesti gestiti .
- Windows Desktop tramite P/Invoke di SetWindowDisplayAffinity, che limita cosa può essere catturato dal sistema operativo .
- Web non esistono API browser-native per bloccare screenshot: si possono solo adottare workaround come overlay CSS/JS, ma non è mai completamente efficace.
- Plugin MAUI: Plugin.Maui.ScreenSecuritysemplifica l’abilitazione/disabilitazione dinamica del blocco e l’ascolto di eventi di screenshot su Android, iOS e Windows.
Perché attivare il Blocco screenshot su MAUI.net
Le app che gestiscono dati sensibili (es. banking, documenti riservati, contenuti DRM) devono prevenire la cattura non autorizzata dello schermo. Senza questa protezione, un utente può violare la privacy o i diritti d’autore semplicemente scattando una foto digitale o usando strumenti di registrazione schermo.
Soluzioni native per Android
Su Android il metodo più semplice è impostare il flag FLAG_SECURE sulla finestra dell’Activity.
using Android.Views;
using Microsoft.Maui;
using Platform = Microsoft.Maui.ApplicationModel.Platform;
public static void EnableSecureFlag()
{
    var activity = Platform.CurrentActivity;
    activity?.Window?.SetFlags(
        WindowManagerFlags.Secure,
        WindowManagerFlags.Secure
    );
}
Questo previene sia gli screenshot sia la proiezione del contenuto su display non sicuri . Tuttavia, da .NET MAUI 9 su pagine modali il flag può non essere applicato correttamente, richiedendo workaround o plugin dedicati .
Soluzioni native per iOS
Apple non fornisce un’impostazione FLAG_SECURE come Android, ma si può oscurare il contenuto quando l’app va in background:
// AppDelegate.swift
import UIKit
import Flutter
@UIApplicationMain
class AppDelegate: FlutterAppDelegate {
  var blurView: UIVisualEffectView?
  override func applicationWillResignActive(_ application: UIApplication) {
    let blurEffect = UIBlurEffect(style: .regular)
    blurView = UIVisualEffectView(effect: blurEffect)
    blurView?.frame = window!.bounds
    window?.addSubview(blurView!)
  }
  override func applicationDidBecomeActive(_ application: UIApplication) {
    blurView?.removeFromSuperview()
  }
}
In contesti gestiti (MDM) è possibile utilizzare la policy “Block screenshots and screen recording” su dispositivi iOS, ma è un’impostazione che agisce a livello di device e non di singola app .
Soluzioni per Windows Desktop
Su Windows desktop (WPF/UWP/WinUI) è possibile utilizzare la chiamata nativa SetWindowDisplayAffinity per indicare al sistema di non consentire la cattura del contenuto della finestra:
using System;
using System.Runtime.InteropServices;
using Microsoft.UI.Xaml;
using WinRT;
// P/Invoke
[DllImport("user32.dll")]
static extern bool SetWindowDisplayAffinity(IntPtr hwnd, uint affinity);
const uint WDA_MONITOR = 1;
public void ProtectWindow(Window window)
{
    var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(window);
    SetWindowDisplayAffinity(hwnd, WDA_MONITOR);
}
Tuttavia, la chiamata può restituire ERROR_INVALID_PARAMETER se non supportata dall’OS o dal contesto di esecuzione 
Soluzioni per il Web
Nei browser non esistono API standard per bloccare screenshot o screen recording. Alcuni workaround includono disabilitare il tasto destro, posizionare overlay semi-trasparenti o monitorare eventi di tastiera, ma nessuno impedisce realmente la cattura schermo, che resta sotto il controllo del sistema operativo.
Librerie e plugin per Blocco screenshot su MAUI.net
Plugin.Maui.ScreenSecurity
Un plugin cross-platform che racchiude in un’unica API la gestione del blocco screenshot su Android, iOS e Windows.
Installazione
Install-Package Plugin.Maui.ScreenSecurity
Inicializzazione (in MauiProgram.cs)
using Plugin.Maui.ScreenSecurity;
public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
      .UseMauiApp<App>()
      .UseScreenSecurity(); // registra il servizio
    return builder.Build();
}
Utilizzo
using Plugin.Maui.ScreenSecurity;
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
        // Disabilita screenshot
        ScreenSecurity.Default.Enable();
        // Riabilita screenshot
        // ScreenSecurity.Default.Disable();
        // Ascolta eventi di cattura
        ScreenSecurity.Default.ScreenCaptured += (s, e) =>
        {
            Debug.WriteLine("Screenshot preso!");
        };
    }
}
Di seguito un elenco dei principali plugin (e soluzioni correlate) per bloccare screenshot nelle app .NET MAUI, con esempi di codice e una tabella riassuntiva di pro e contro.
1. Plugin.Maui.ScreenSecurity
Il plugin open-source più diffuso per .NET MAUI, sviluppato da Fabri Bertani, espone un’unica API cross-platform per Android, iOS e Windows, permettendo di attivare/disattivare la protezione e di intercettare gli eventi di screenshot .
Installazione
Install-Package Plugin.Maui.ScreenSecurity
Registrazione (MauiProgram.cs)
using Plugin.Maui.ScreenSecurity;
public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
      .UseMauiApp<App>()
      .UseScreenSecurity();    // abilita il servizio
    return builder.Build();
}
Utilizzo (ad es. in MainPage.xaml.cs)
using Plugin.Maui.ScreenSecurity;
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
        // Disabilita screenshot/registrazione
        ScreenSecurity.Default.Enable();
        // Riabilita screenshot
        // ScreenSecurity.Default.Disable();
        // Event handler per screenshot
        ScreenSecurity.Default.ScreenCaptured += (s, e) =>
        {
            Debug.WriteLine("È stato scattato uno screenshot!");
        };
    }
}
2. ScreenShieldKit (commerciale)
E’ un SDK a pagamento che fornisce widget (iOS) e librerie native per Flutter, Xamarin, React Native, SwiftUI, ma non “pronto MAUI” . Di solito si integra via NuGet/CocoaPods e offre protezione avanzata (watermark, blur dinamico, hot-zone non capturabili).
Esempio di pseudo-codice MAUI (ipotetico, serve wrapper nativo)
// Dopo aver aggiunto il binding di ScreenShieldKit:
public partial class SecurePage : ContentPage
{
    protected override void OnAppearing()
    {
        base.OnAppearing();
        // Attiva protezione su iOS/macOS
        ScreenShieldKit.Protect(this.Handler.PlatformView);
    }
    protected override void OnDisappearing()
    {
        // Disattiva protezione
        ScreenShieldKit.Unprotect(this.Handler.PlatformView);
        base.OnDisappearing();
    }
}
3. Appdome (piattaforma di integrazione)
Non è un “plugin” MAUI ma un servizio SaaS che, in fase di build, inietta protezioni anti-screenshot e anti-screenrecording nelle app Android/iOS, sia in contesti BYOD sia gestiti (MDM/MAM) .
# Flusso tipico (no-code):
1. Carica APK/AAB o IPA su Appdome.
2. Seleziona “Prevent Screenshot” e “Prevent Screen Recording”.
3. Scarica l’app “protetta” e distribuiscila.
4. Soluzione manuale (senza plugin)
Se non si vuole dipendere da librerie esterne, si possono usare direttamente le API native:
Android
using Android.Views;
using Microsoft.Maui.ApplicationModel;
public static void EnableAndroidSecureFlag()
{
    var activity = Platform.CurrentActivity;
    activity.Window.SetFlags(
        WindowManagerFlags.Secure,
        WindowManagerFlags.Secure
    );
}
iOS
Inserire in AppDelegate (Xamarin.Forms/MAUI):
override func applicationWillResignActive(_ application: UIApplication) {
    let blur = UIBlurEffect(style: .regular)
    let blurView = UIVisualEffectView(effect: blur)
    blurView.frame = window!.bounds
    window?.addSubview(blurView)
}
override func applicationDidBecomeActive(_ application: UIApplication) {
    window?.subviews
          .filter { $0 is UIVisualEffectView }
          .forEach { $0.removeFromSuperview() }
}
Tabella riassuntiva principali plugin Blocco screenshot su MAUI.net
| Soluzione | Piattaforme | Pro | Contro | 
|---|---|---|---|
| Plugin.Maui.ScreenSecurity | Android, iOS, Windows | • Open-source e gratuito• API unificata• Event stream di screenshot | • Nessun supporto Web/MacCatalyst | 
| ScreenShieldKit | iOS (Xamarin, Flutter…) | • Protezione avanzata• Widget nativi con watermark/blur | • Commerciale a pagamento• Non pronto MAUI | 
| Appdome | Android, iOS | • No-code, velocissimo da integrare• Supporto MDM/MAM | • Servizio SaaS a consumo• Non modifica il codice | 
| Implementazione manuale | Android, iOS | • Nessuna dipendenza esterna• Pieno controllo | • Code-duplication per piattaforma• Maggiore complessità | 
Nota: al momento non esistono altri plugin specifici per .NET MAUI dedicati al blocco screenshot oltre a quelli elencati. Per Web e desktop macOS non esistono API native che permettano un blocco reale dello screenshot, si ricorre a soluzioni di overlay o a servizi esterni.
Conclusioni – Blocco screenshot su MAUI.net
Bloccare gli screenshot in .NET MAUI richiede approcci diversi a seconda della piattaforma. Se da un lato è possibile intervenire direttamente con flag nativi su Android e overlay sfocati su iOS, dall’altro per Windows serve P/Invoke a SetWindowDisplayAffinity, mentre sul Web non esistono protezioni reali. L’utilizzo di plugin come Plugin.Maui.ScreenSecurity semplifica l’implementazione e garantisce coerenza tra le piattaforme supportate.
Innovaformazione, scuola informatica specialistica promuove lo sviluppo mobile con MAUI.net in maniera consapevole. Accompagniamo le aziende nella formazione del team di sviluppatori e nell’offerta formativa trovate il Corso MAUI.net .
Per altri articoli tecnici invece consigliamo di navigare sul nostro blog QUI.
INFO: info@innovaformazione.net – tel. 3471012275 (Dario Carrassi)
Vuoi essere ricontattato? Lasciaci il tuo numero telefonico e la tua email, ti richiameremo nelle 24h:
Articoli correlati
 
                            
                            Programmazione SAP ABAP ECC vs ABAP su HANA
 
                            
                            Come sviluppare un clone Ryanair
 
                            
                            MySQL Database Admnistrator DBA
 
                            
                            Intelligenza Artificiale in SolidWorks
 
                            
                            Vulnerabilità CVE-2025-55315
 
                            
                            