[C#] Menu contestuale shell di Windows

sabato 28 novembre 2009 - 18.31

95Ulisse Profilo | Newbie

Salve a tutti,
questa è la prima volta che scrivo su un forum, quindi chiedo scusa in anticipo per ogni eventuale errore successivo.
Io programmo in C# utilizzando Visual Studio 2008 e il .NET Framework 3.5.
Da tempo sto cercando di sviluppare un'estensione della Shell di Windows e, cercando un po' su internet, ho trovato alcuni esempi che ho successivamente rielaborato.
Il problema non sussiste finchè i menu inseriti non hanno sottomenu, però ho la necessità di creare alcuni elementi con dei figli e, quindi ho pensato di fare così:

//Crea un popup IntPtr PtrPopup = DllImports.CreatePopupMenu(); //Crea il figlio MENUITEMINFO miiChild = new MENUITEMINFO() { cbSize = 48, fMask = (uint)MIIM.ID | (uint)MIIM.TYPE | (uint)MIIM.STATE, wID = 2, fType = (uint)MF.STRING, dwTypeData = "Sottomenu", fState = (uint)MF.ENABLED }; //Popola il popup con il figlio DllImports.InsertMenuItem((uint)PtrPopup, (uint)2, 1, ref miiChild); //Crea il padre MENUITEMINFO miiParent = new MENUITEMINFO() { cbSize = 48, fMask = (uint)MIIM.SUBMENU | (uint)MIIM.ID | (uint)MIIM.TYPE | (uint)MIIM.STATE, wID = 1, fType = (uint)MF.STRING, dwTypeData = "Parent menu", fState = (uint)MF.ENABLED }; //Imposta PtrPopup come sottomenu di miiParent miiParent.hSubMenu = PtrPopup.ToInt32(); //Inserisce miiParent nella Shell di Windows DllImports.InsertMenuItem(hmenu, (uint)2, 1, ref miiParent);

Alcune cose sul codice:
• DllImports è una classe contenente dei metodi statici che utilizzo per richiamare della API di Windows tramite l'attributo DllImport
• MIIM e MF sono degli Enum contenenti degli Int
• hmenu è l'handle del menu della Shell di Windows

Questo codice funziona da un punto di vista strutturale, nel senso che nella Shell compare un menu etichettato "Parent menu" con un sottomenu "Sottomenu", però non riesco a ricevere nessun evento da quest'ultimo.

La mia domanda è questa:
come faccio a intercettare l'evento click sul sottomenu?

Sono accettati sia consigli che altre idee, grazie a tutti in anticipo.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5