È necessario considerare come disegnare il rettangolo intorno alla finestra per primo, che influisce sul resto del codice. Il modo più semplice per farlo consiste nell'utilizzare un modulo con TransparencyKey impostato su BackColor e FormBorderStyle impostato su Nessuno.Disegna un rettangolo nell'evento Paint, della stessa dimensione del ClientRectangle del modulo, che ti offre un rettangolo visibile con tutto il resto trasparente. Imposta la proprietà Posizione e Dimensioni del modulo in modo che corrisponda alla finestra che hai trovato.
Ora trovare la finestra dalla posizione del mouse. Non è possibile utilizzare WindowFromPoint(), non considera le finestre disabilitate. Dovrai utilizzare EnumWindows(). Nel callback, chiama GetWindowRect() e controlla se il mouse si trova all'interno del rettangolo. Assicurati di ignorare la finestra di disegno del rettangolo.
Quando ottieni una corrispondenza, chiama ripetutamente GetWindow() con GW_HWNDPREV per trovare le finestre che si sovrappongono alla finestra trovata. Continua a controllare il rettangolo e continua a ignorare la finestra del rettangolo.
In questo modo si ottiene la finestra di livello superiore su cui è posizionato il cursore del mouse. Ora utilizzare ChildWindowFromPoint() per verificare se il mouse si trova su una finestra secondaria, se presente. Crea il tuo modulo di disegno rettangolare, se necessario, e dargli le stesse dimensioni e la stessa posizione della finestra trovata.
Chiama questo codice dall'evento MouseMove di, ad esempio, un PictureBox che mostra una grafica a occhio di bue. Imposta la proprietà Capture su true nel suo evento MouseDown.
Chiudere il metodo Close() del modulo di disegno del rettangolo nell'evento MouseUp.
fonte
2010-02-21 21:22:17
Questo è stato fantastico, grazie mille. –