Dato che la chat non � inserita in un controllo standard, non posso leggere
il testo con WM_GETTEXT, per� posso manualmente cliccare su una riga della
chat stessa (si seleziona automaticamente tutta la riga) e premere Ctrl+C
per salvarla negli appunti.... potrebbe essere un sistema di salvataggio, mi
sono detto
Volendo automatizzare l' operazione, ho pensato di simulare tramite API la
pressione del mouse nell' ultima riga della chat (fornendo le relative
coordinate in pixel), salvando poi i dati selezionati simulando la pressione
di Ctrl+C e poi andandoli a prendere dalla Clipboard.
Per selezionare la riga della chat ho inserito un Timer (attualmente �
impostato ogni decimo di secondo, ma a regime dovrebbe essere a 1/100 di
secondo):
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Int32, ByVal
dx As Int32, ByVal dy As Int32, ByVal cButtons As Int32, ByVal dwExtraInfo
As Int32)
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Timer.Tick
mouse_event(MOUSEEVENTF_LEFTDOWN, Pos1, Pos2, 0, 0)
mouse_event(MOUSEEVENTF_LEFTUP, Pos1, Pos2, 0, 0)
End Sub
dove Pos1 e Pos2 sono le coordinate in pixel del punto dello schermo che
voglio cliccare
PROBLEMA:
Il mouse diviene ingestibile: innanzitutto ogni decimo di secondo viene
simulato il click DOVE ESSO SI TROVA, e non in Pos1/Pos2, se poi, ad
esempio, cerco di spostare un qualsiasi form, la cosa � infattibile:
insomma, il mouse � incontrollabile (ovviamente, visto che da codice
effettua continui click).
Quindi a conti fatti dovrei riuscire a cliccare in Pos1/Pos2 come se fosse
un thread a parte, lasciando assolutamente libera la gestione del mouse
"vero"
Cio� mi servirebbe una API che selezioni del testo ovunque sullo schermo ma
senza utilizzare alcun comando relativo al mouse
E' fattibile?