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.