Ik ben bezig aan een tooltje dat vensters horizontaal/verticaal tilet.
Er staat een icon in de system tray. Een context menuutje geeft enkele opties waaronder "tile horizontal" en "tile vertical".
Wanneer een van beide geklikt wordt, installeer ik een globale mouse-hook. Aan de hand van waar de gebruiker klikt haal ik een window handle op. Naast het installeren van de mouse hook verandert ook het menuutje zodat je kunt annuleren. (door opnieuw rechts te klikken op de icon en dan "Cancel" te kiezen).
Het probleem is nu dat wanneer je cancel klikt, ook de globale mouse-hook geactiveerd wordt. Ik krijg dus een window handle terug. Zowiezo moet ik elke window handle valideren (om bvb de startbalk en de desktop eruit te filteren etc). Ik kan maar nergens die windows handle terug vinden om em eruit te filteren. (Niet in mijn eigen objecten zoals context menu, main form, enz. of in andere)
De VC6 Spy++ geeft aan "Popup menu"/window class 32768.
De WinAPI GetAncestor() functie geeft dezelfde waarde terug en IsMenu() is false.
Heeft iemand een idee waar ik aan die handle kan komen of als ik ze op een andere manier kan filteren?
stukje relevante code:
Er staat een icon in de system tray. Een context menuutje geeft enkele opties waaronder "tile horizontal" en "tile vertical".
Wanneer een van beide geklikt wordt, installeer ik een globale mouse-hook. Aan de hand van waar de gebruiker klikt haal ik een window handle op. Naast het installeren van de mouse hook verandert ook het menuutje zodat je kunt annuleren. (door opnieuw rechts te klikken op de icon en dan "Cancel" te kiezen).
Het probleem is nu dat wanneer je cancel klikt, ook de globale mouse-hook geactiveerd wordt. Ik krijg dus een window handle terug. Zowiezo moet ik elke window handle valideren (om bvb de startbalk en de desktop eruit te filteren etc). Ik kan maar nergens die windows handle terug vinden om em eruit te filteren. (Niet in mijn eigen objecten zoals context menu, main form, enz. of in andere)
De VC6 Spy++ geeft aan "Popup menu"/window class 32768.
De WinAPI GetAncestor() functie geeft dezelfde waarde terug en IsMenu() is false.
Heeft iemand een idee waar ik aan die handle kan komen of als ik ze op een andere manier kan filteren?
stukje relevante code:
C#:
1
2
3
4
5
6
7
8
| IntPtr taskbar = GetAncestor(FindWindow("Shell_TrayWnd", null),3); IntPtr self = GetAncestor(this.Handle, 3); return handle != IntPtr.Zero && //geen NULL handle != taskbar && handle != self && IsWindow(handle) && !IsMenu(handle) && (handles.Count == 0 || (handles.Count == 1 && (IntPtr)handles[0] != handle)); // geen reeds gekende handle |
ASSUME makes an ASS out of U and ME