Programmazione.it v6.2
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Chat Forum
Disabilitare la chiusura delle applicazioni con il framework .NET
Scritto da Rocco Galati il 09-12-2009 ore 07:11
Intel Software
Per impedire all'utente di interagire con le operazioni del programma, a volte bisogna disabilitare alcune opzioni di controllo presenti all'interno della finestra dell'applicazione che si sta sviluppando; ad esempio, disabilitare l'opzione di chiusura, che si trova in alto a destra nelle finestre di dialogo, dei sistemi di casa Microsoft, allo scopo di evitare un'interruzione non prevista.

Per effettuare un'operazione di questo tipo, occorre impiegare un insieme di procedure disponibili grazie all'interfaccia offerta dalle API di Windows, che permettano di effettuare un trap degli eventi, a un livello più basso di quello applicativo; così facendo, è possibile impedire la ricezione del segnale di interruzione del processo in corso.

Se si sta utilizzando il framework .NET, come prima cosa, bisognerà aggiungere, al proprio spazio di lavoro, il namespace System.Runtime.InteropServices, che supporta la gestione e la comunicazione tra i processi e i servizi attivi del sistema operativo. In seguito, si fa ricorso alle chiamate:
  1. [DllImport("User32")]
  2. private static extern int RemoveMenu(IntPtr Menu, int posizione, int flag);
  3.  
  4. [DllImport("User32")]
  5. private static extern IntPtr GetSystemMenu(IntPtr Menu, int revert);
  6.  
  7. [DllImport("User32")]
  8. private static extern int GetMenuItemCount(IntPtr Menu);
  9.  
  10. [DllImport("User32")]
  11. private static extern int DrawMenuBar(IntPtr finestra_di_dialogo);
La prima viene impiegata per eliminare un oggetto da un menu nella posizione specificata; la seconda chiamata serve a ottenere un handler di un determinato menu, mentre la terza ne conta il numero di oggetti presenti. L'ultima chiamata è utilizzata per ridisegnare il nuovo menu in seguito alle modifiche apportate.

A questo punto, disabilitare, a tutti gli effetti, la funzione di chiusura dell'applicazione diventa molto semplice: basta rilevare l'indirizzo del menu, contarne gli oggetti, rimuovere quello a cui si è interessati e inviarlo nuovamente al sistema per farlo visualizzare.
  1. IntPtr Menu = GetSystemMenu(this.Handle, false);
  2. int numero_oggetti = GetMenuItemCount(Menu);
  3. RemoveMenu(Menu, numero_oggetti - 1, disable | remove);
  4. DrawMenuBar(this.Handle);
Precedente: LinkedIn rilascia delle risorse per gli sviluppatori
Successiva: Square, effettuare piccoli pagamenti con l'iPhone
Copyright Programmazione.it™ 1999-2009. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.833 secondi. Sito ottimizzato per Mozilla Firefox. Powered by Kyron.