Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. Simulare il click del mouse su un'altra applicazione
Forum Updated to NodeBB v4.3 + New Features

Simulare il click del mouse su un'altra applicazione

Scheduled Pinned Locked Moved Solved Italian
7 Posts 2 Posters 3.6k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    bvox123
    wrote on last edited by
    #1

    Buongiorno.
    Mi sto scervellando su un problema che non riesco a risolvere, eppure sono convinto che la soluzione è molto semplice.
    Da un applicativo che impegna la metà sinistra dello schermo dovrei fare click in un particolare punto di un'applicazione che impegna la metà destra dello schermo. Cob QCursor::setPos(x, y) mi posiziono sull'area interessata, ma poi come posso fare per simulare il click come se lo facessi io col mouse ?
    Vi ringrazio e spero proprio che qualcuno mi possa dare una mano, magari un link dove reperire informazioni utili.
    Saluti
    bvox

    1 Reply Last reply
    0
    • B Offline
      B Offline
      bvox123
      wrote on last edited by
      #2

      Ho trovato una soluzione, che però non mi soddisfa molto.
      Ho installato xdotool e così riesco a pigiare il pulsante sull'altra applicazione che per esempio si trova in posizione 1000, 800 nel seguente modo:
      QCursor::setPos(1000, 800);
      system ("xdotool click 1");
      Se qualcuno mi sapesse suggerire un metodo più elegante, che magari utilizza le classi Qt, gliene sarei veramente grato.
      Saluti
      bvox

      1 Reply Last reply
      0
      • VRoninV Offline
        VRoninV Offline
        VRonin
        wrote on last edited by VRonin
        #3

        Ci sono 3 possibili soluzioni ma dipende da cosa tu stia tentando di fare:

        • Sei stai creando un test per la tua applicazione puoi usare il modulo QtTest e usare QTest::mouseClick. Ref: http://doc.qt.io/qt-5/qttestlib-tutorial3-example.html
        • Se tutto cio' che vuoi e' il risultato del click puoi emettere il segnale manualmente. Se, per esempio, vuoi "cliccare" un QPushButton puoi semplicemente evocare il segnale button->clicked(false);
        • Se vuoi proprio che avvenga il click, puoi invocare QCoreApplication::postEvent:
        QCoreApplication::postEvent(widget,new QMouseEvent(QEvent::MouseButtonPress,widget->mapFromGlobal(1000, 800),Qt::LeftButton,Qt::NoButton,Qt::NoModifier);
        QCoreApplication::postEvent(widget,new QMouseEvent(QEvent::MouseButtonRelease,widget->mapFromGlobal(1000, 800),Qt::LeftButton,Qt::NoButton,Qt::NoModifier);
        

        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
        ~Napoleon Bonaparte

        On a crusade to banish setIndexWidget() from the holy land of Qt

        1 Reply Last reply
        1
        • B Offline
          B Offline
          bvox123
          wrote on last edited by
          #4

          @VRonin said in Simulare il click del mouse su un'altra applicazione:

          QCoreApplication::postEvent(widget,new QMouseEvent(QEvent::MouseButtonPress,widget->mapFromGlobal(1000, 800),Qt::LeftButton,Qt::NoButton,Qt::NoModifier);
          QCoreApplication::postEvent(widget,new QMouseEvent(QEvent::MouseButtonRelease,widget->mapFromGlobal(1000, 800),Qt::LeftButton,Qt::NoButton,Qt::NoModifier);

          Grazie. Proverò.

          1 Reply Last reply
          0
          • B Offline
            B Offline
            bvox123
            wrote on last edited by
            #5

            Ciao VRonin.
            Ho provato ad inserire le tue istruzioni nell'evento di un mio pulsante, ma mi dà errore di compilazione. Sicuramente è colpa della mia scarsa conoscenza dell'uso delle classi, ma se posso importunarti, mi dici come potrei risolvere ? Ecco il codice che ho inserito:

                QCoreApplication::postEvent(hrnet,new QMouseEvent(QEvent::MouseButtonPress,hrnet->mapFromGlobal(1000, 800),Qt::LeftButton,Qt::NoButton,Qt::NoModifier));
                QCoreApplication::postEvent(hrnet,new QMouseEvent(QEvent::MouseButtonRelease,hrnet->mapFromGlobal(1000, 800),Qt::LeftButton,Qt::NoButton,Qt::NoModifier));
            
            

            e questi sono gli errori in compilazioni:
            0_1500290681543_Schermata del 2017-07-17 13-24-19.png

            Ritengo doveroso dirti qual è lo scopo di questa cosa.
            Col browser vado sul sito per le giocate del lotto, ch prevede l'inserimento delle scommesse direttamente dalla pagina web.
            Riduco questa pagina alla metà destra dello schermo, mentre nella metà sinistra gira il mio applicativo.
            Quando decido quali combinazizoni di numeri giocare, il mio programma deve posizionare il mouse al posto giusto e fare click: con questo metodo automatizzo le 30-50 giocate da 1 euro l'una che il programma deciderà di effettuare.

            E' tutto. Grazie per la risposta che sicuramente mi darai.
            bvox

            1 Reply Last reply
            0
            • VRoninV Offline
              VRoninV Offline
              VRonin
              wrote on last edited by
              #6

              Il tuo errore deriva o da un #include mancante o un typo ma non importa, tutto quello che ti ho detto non vale per quello che vuoi fare. Tutti e 3 i metodi mandano click ad applicazioni costruite con Qt.

              Ci sono 2 modi per fare quel che vuoi fare:

              • Se vuoi usare Qt porta il browser all'interno dell'applicazione usando Qt Web Engine (basato sullo stesso motore di Chrome): http://doc.qt.io/qt-5/qtwebengine-modules.html con quello puoi interagire direttamente sulla pagina senza passare per muovere il mouse o digitare da tastiera.
              • Ci sono altre applicazioni nate con lo scopo di fare queste operazioni. la piu' famosa e' probabilmente https://autohotkey.com/ per windows ma, visto che questo e' un forum di Qt non vado oltre in questa opzione

              "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
              ~Napoleon Bonaparte

              On a crusade to banish setIndexWidget() from the holy land of Qt

              1 Reply Last reply
              0
              • B Offline
                B Offline
                bvox123
                wrote on last edited by
                #7

                Grazie. Quindi per adesso mi accontenterò della soluzione "poco da programmatore" che avevo trovato con xdotool.
                Buona serata.

                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved