Simulare il click del mouse su un'altra applicazione
-
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 -
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 -
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);
-
@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ò.
-
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:
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 -
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