Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [vb2008] click del mouse in un punto dello schermo

    Per "salvare" e successivamente elaborare il contenuto di una chat, posso manualmente cliccare sull' ultima riga della chat stessa (si seleziona automaticamente tutta la riga) e premere Ctrl+C per salvarla negli appunti

    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.

    Iniziamo dal selezionare la riga della chat (attualmente il Timer è 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, vorrei riuscire a cliccare in Pos1/Pos2 come se fosse un thread a parte, lasciando assolutamente libera la gestione del mouse "vero"

    E' fattibile?

  2. #2
    non in questo modo... l'api che stai utilizzando NON SIMULA affatto lo spostamento e il click, LO EFFETTUA.

    quindi vedrai il mouse muoversi e il click avvenire, anche se non sarai stato tu ad effettuarlo con il tuo mouse. non c'è thread che regga perchè l'api va a livello di kernel. Quindi se starai spostando una form, al tick del timer il mouse si spoesterà (molto probabilmente con ancora il Mouse_Down, quindi spostandoti anche la form) ed effettuerà il click.

    Temo che dovrai risolvere il tuo problema in un'altra maniera.

  3. #3
    [b]Temo che dovrai risolvere il tuo problema in un'altra maniera.
    lo temo anche io

    quindi la domanda è: qualcuno ha idea, almeno a livello di idea, in quale maniera??

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    La posizione del puntatore del mouse la imposti con la funzione API
    SetCursorPos x,y

    mentre puoi ricavarla con
    GetCursorPos POINT

    Tieni presente che in NET le dichiarazioni API devono usare Integer al posto dei (vecchi) Long.

    http://www.pinvoke.net/default.aspx/...CursorPos.html


  5. #5
    Originariamente inviato da eziogsv
    lo temo anche io

    quindi la domanda è: qualcuno ha idea, almeno a livello di idea, in quale maniera??
    Non saprei, per "ultima riga" cosa intendi, che controllo è quello che usi nella chat? una listview? una textarea?

  6. #6
    @ gibra

    come spiegato, NON POSSO usare il mouse per selezionare l' area: ogni altro lavoro sarebbe impossibile da svolgere contemporaneamente

    @ KataKlism2002

    una precisazione: il controllo contenente il testo non è un controllo standard di windows, è un controllo custom, per cui non posso catturare il testo con WM_GETTEXT

    servirebbe una Api che , date le coordinate di una area di testo, la selezioni come se lo facessi col mouse, ma senza usare il mouse

  7. #7
    mi spiace ezio... non saprei proprio come fare... forse conviene mettere mano al controllo custom (ammesso che se ne abbia il codice sorgente) e scriversi funzioni che facciano al caso tuo

  8. #8
    non ho il sorgente del custom, mannaggia

    inizialmente avevo provato a catturare una immagine della zona predeterminata e scansirla con un OCR (quello contenuto in Microsoft Document Image), vedi mio post

    http://forum.html.it/forum/showthrea...readid=1368628

    ma MODI non rilascia l' immagine neanche utilizzando miDoc.Close (ho cercato sul web, la questione è stata posta più volte senza risposta) da cui l' errore che evidenzio nell' altro post, errore evitabile rinominando continuamente il file, ma la cosa diviene rapidamente ingestibile per problemi di memoria

    che con 600 e più API a disposizione non si possa SIMULARE un click del mouse fuori dal proprio form con una istruzione che però non tocchi in nessun modo il mouse reale è cosa che mi fa uscire di testa

  9. #9
    ma i dati di quest'ultima riga non te li puoi memorizzare al momento in cui li passi all'oggetto custom?

  10. #10
    i miei, ma quelli scritti dagli altri? è una chat

    leggendo ogni frazione di secondo l' ultima riga, ovviamente non considerando il dato se fosse lo stesso del precedente, il problema sarebbe risolto....

    da qualche parte ho letto qualcosa del tipo: "tutto quello che è visualizzato a schermo è recuperabile" o di screen scrapers, ma tutorials che spieghino come fare IN PRATICA a chi è a digiuno di queste cose nisba, nothing, nada

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.