- Modificare controlli di programmi esterni- |
|||
COSA SERVE PER QUESTO TUTORIAL | |||
Download | Chiedi sul FORUM | Glossario | Microsoft Visual Basic 6 - Conoscenze basiche di VB | ||
WindowFromPoint e GetCursorPos per agire su programmi esterni | |||
OTTENERE IL TESTO DI UNA RIGA DI UNA CASELLA DI TESTO NON APPARTENENTE AL PROGETTO Le funzioni WindowFromPoint e GetCurosrPos Fino ad ora abbiamo sempre lavorato su controlli che appartenevano al form (e quindi al processo) in cui veniva eseguito il codice, in sostanza abbiamo semplicemente usato un metodo complesso per fare qualcosa che si poteva ottenere più semplicemente con una chiamate a Split sul testo della casella (Prova.Text). Abbiamo sempre utilizzato la proprietà Prova.hwnd per ottenere l'handle della TextBox: lngLunghezzaRiga = SendMessage(Prova.hwnd, EM_GETLINE, 2, ByVal strRiga) Ma se volessimo agire su una TextBox (o
qualunque altro controllo) di altri programmi?
Avremmo bisogno del loro handle da sostituire a Prova.hwnd.
Come possiamo ricavare l'handle di un programma in
esecuzione? Public Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" _ (ByVal xPoint As Long, ByVal yPoint As Long) As Long I parametri xPoint e yPoint
indicano la posizione del
controllo del quale si desidera conoscere l'handle, nel nostro caso si
tratterà delle coordinate del puntatore del mouse. Public Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long Dove lpPoint è di tipo POINTAPI ovvero una coppia di valori Long che indicano rispettivamente la coordinata X e Y dello schermo: Public Type POINTAPI Ora che sappiamo come ottnere l'handle desiderato possiamo inviare la
richiesta al controllo che ci interessa; per semplicità
continueremo a utilizzare l'operazione EM_GETLINE
dell'articolo precedente ma servendoci anche di un programma esterno
come come il Blocco Note (Start, Esegui, notepad) in cui andranno
scritte 4 o 5 righe di prova. Private Sub pctFinderTool_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim ptPosizione As POINTAPI GetCursorPos ptPosizione Dim strRiga As String Dim lngLunghezzaRiga As Long strRiga = String(255, Chr(1)) lngLunghezzaRiga = SendMessage(WindowFromPoint(ptPosizione.X, ptPosizione.Y), EM_GETLINE, 2, ByVal strRiga) NumRighe.Text = Left(strRiga, lngLunghezzaRiga) End Sub Come si può vedere ottenere le coordinate del cursore è molto semplice basta una chiamata a GetCursorPos passando una variabile di tipo POINTAPI in cui verranno memorizzati valori X e Y della posizione del mouse. Anche la funzione SendMessage è stata modificata: al posto di Prova.hWnd abbiamo messo una chiamata alla funzione WinbowFromPoint passando le coordinate X-Y appena ottenute. A questo punto se si avvia il notepad (e si scrivono alcune
righe), si preme sul Finder Tool e si rilascia in centro alla casella di
testo del Blocco Note nella casella di testo NumRighe apparirà la terza
riga che abbiamo digitato. |
|||
<< INDIETRO | by VeNoM00 |