2017-05-02 48 views
1
#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QMouseEvent> 
#include <QTimer> 
#include <QWidget> 
#include <windowsx.h> 
#include <Windows.h> 
#include <QtTest> 
#include <QDesktopWidget> 
#include <QApplication> 

std::vector<QPoint> poz; 
int i=0; 
int a=0; 
double timer_time=10; 
bool certain=false; 
bool mouse_clicked=true; 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    ui->centralWidget->setStyleSheet("background-color: #535353;" "color: white;"); 
    ui->click_on->setStyleSheet("color: #ceb008;"); 
    ui->speed_label->setText(QString::number(timer_time)); 
    //this->setWindowFlags(Qt::WindowStaysOnTopHint); 


    this->setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint); //no_frames and always_on_top 

    Qt::X11BypassWindowManagerHint; 

    timer = new QTimer(this); 
    connect(timer, SIGNAL(timeout()), this, SLOT(clicked()));  //set cursor position timer 

    timer_move = new QTimer(this); 
    connect(timer_move, SIGNAL(timeout()), this, SLOT(repeat())); //move cursor timer 

    timer_points = new QTimer(this); 
    connect(timer_points, SIGNAL(timeout()), this, SLOT(points())); //points timer 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

void MainWindow::on_start_clicked() 
{ 
    if (!certain) timer->start(timer_time); 
    else timer_points->start(timer_time); 

} 

void MainWindow::on_stop_clicked() 
{ 
    timer->stop(); 
} 

void MainWindow::clicked() 
{ 
     p = QCursor::pos(); 
     poz.push_back(p); 
     ui->xy->setText("x: "+QString::number(p.rx())+" y: "+QString::number(p.ry())); 
     ui->list->appendPlainText("x: "+QString::number(poz[i].rx())+" y: "+QString::number(poz[i].ry())); 
     i++; 
} 

void MainWindow::on_hide_clicked() 
{ 
    this->setWindowFlags(Qt::WindowStaysOnBottomHint); 
} 

void MainWindow::on_off_clicked() 
{ 
    exit(0); 
} 

void MainWindow::on_repeat_clicked() 
{ 
    ui->repeat->setStyleSheet("color: #ceb008;"); 
    repeat(); 
} 

void MainWindow::repeat(){ 
    //int x=1027; 
    //int y=322; 
    int x=rand()%1920; 
    int y=rand()%1080; 
    on_stop_clicked(); 
    if(a==0) {timer_move->start(timer_time);} 
    if(a<i) { 
     this->cursor().setPos(poz[a].rx(), poz[a].ry()); 
     // QPointF p(rand()%1920,rand()%1080); 
     // QMouseEvent(QEvent::MouseButtonPress, p, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); 
     // QMouseEvent(QEvent::MouseButtonRelease, p, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); 
     //QTest::mousePress(this,); 
     // QTest::mouseRelease(); 
     //QTest::mouseClick(this,Qt::LeftButton,Qt::NoModifier,poz[a]); 
     // QTest::mouseClick (this, Qt::LeftButton, Qt::NoModifier, QPoint(660, 1060), 100); 
     //QWidget *d = QApplication::desktop()->screen(); 
     //QTest::mouseClick(d, Qt::LeftButton, Qt::NoModifier, QPoint(x,y)); 


     HWND h = GetForegroundWindow(); 

     WORD mouseX = 10;// x coord of mouse 

     WORD mouseY = 10;// y coord of mouse 

     PostMessage(h,WM_LBUTTONDOWN,0,MAKELPARAM(mouseX,mouseY)); 


     //QMouseEvent e(QEvent::MouseButtonPress, poz[a], Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); 
     //QApplication::sendEvent(ui->centralWidget, &e); 
     a++;} 
    else a=0; 
} 

void MainWindow::on_repeat_off_clicked() 
{ 
    timer_move->stop(); 
    a=0; 

    ui->repeat->setStyleSheet("color: white;"); 
} 

void MainWindow::on_points_clicked() 
{ 
    if (certain==false) { 
     certain=true; 
     ui->points->setStyleSheet("color: #ceb008;"); 
    } 
    else { 
     certain=false; 
     ui->points->setStyleSheet("color: white;"); 
    } 
} 

void MainWindow::keyReleaseEvent(QKeyEvent *e){ 
    switch(e->key()){ 
    case Qt::Key_Comma: clicked(); 
     e->accept(); 
     break; 
    } 
} 

void MainWindow::points(){ 
    p = QCursor::pos(); 
    ui->xy->setText("x: "+QString::number(p.rx())+" y: "+QString::number(p.ry())); 
} 

void MainWindow::on_clear_clicked() 
{ 
    timer->stop(); 
    timer_move->stop(); 
    poz.erase(poz.begin(),poz.end()); 
    i=0; 
    a=0; 
    timer_time=10; 
    certain=false; 
    ui->xy->setText(""); 
    ui->list->clear(); 

} 
void MainWindow::on_speed_clicked() 
{ 
    ui->speed_label->setReadOnly(false); 
    ui->speed->setStyleSheet("color: #ceb008;"); 
} 

void MainWindow::on_speed_label_textChanged() 
{ 
    ui->speed_label->setReadOnly(true); 
    timer_time=(ui->speed_label->toPlainText()).toDouble(); 
    ui->speed->setStyleSheet("color: white;"); 

} 

void MainWindow::on_click_on_clicked() 
{ 
    if (mouse_clicked) { 
     ui->click_on->setStyleSheet("color: white;"); 
     mouse_clicked=false; 
    } 
    else { 
     ui->click_on->setStyleSheet("color: #ceb008;"); 
     mouse_clicked=true;} 
} 

mainwidnow.hQt的鼠標點擊模擬誤差(自動唱首歌)

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 


namespace Ui { 
class MainWindow; 
} 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

    QTimer *timer;   //timer for capture a cursor 
    QTimer *timer_move;  //timer for set cursor position 
    QTimer *timer_points; //timer for certain points 
    QPoint p; 

private slots: 

    void on_start_clicked(); 

    void on_stop_clicked(); 

    void clicked(); 

    void on_hide_clicked(); 

    void on_off_clicked(); 

    void on_repeat_clicked(); 

    void repeat(); 

    void on_repeat_off_clicked(); 

    void on_points_clicked(); //choose points with tab 

    void points(); 

    void keyReleaseEvent(QKeyEvent *e); 

    void on_clear_clicked(); 

    void on_speed_clicked(); 

    void on_speed_label_textChanged(); 

    void on_click_on_clicked(); 

private: 
    Ui::MainWindow *ui; 
}; 

#endif // MAINWINDOW_H 

的main.cpp

#include "mainwindow.h" 
#include <QApplication> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 

    return a.exec(); 
} 

autoclicker.pro

#------------------------------------------------- 
# 
# Project created by QtCreator 2017-04-30T09:25:20 
# 
#------------------------------------------------- 

QT  += core gui testlib 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = autoclicker 
TEMPLATE = app 

# The following define makes your compiler emit warnings if you use 
# any feature of Qt which as been marked as deprecated (the exact warnings 
# depend on your compiler). Please consult the documentation of the 
# deprecated API in order to know how to port your code away from it. 
DEFINES += QT_DEPRECATED_WARNINGS 

# You can also make your code fail to compile if you use deprecated APIs. 
# In order to do so, uncomment the following line. 
# You can also select to disable deprecated APIs only up to a certain version of Qt. 
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 


SOURCES += main.cpp\ 
     mainwindow.cpp 

HEADERS += mainwindow.h 

FORMS += mainwindow.ui 

mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?> 
<ui version="4.0"> 
<class>MainWindow</class> 
<widget class="QMainWindow" name="MainWindow"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>419</width> 
    <height>431</height> 
    </rect> 
    </property> 
    <property name="windowTitle"> 
    <string>MainWindow</string> 
    </property> 
    <widget class="QWidget" name="centralWidget"> 
    <widget class="QStackedWidget" name="gridStackedWidget"> 
    <property name="geometry"> 
    <rect> 
     <x>0</x> 
     <y>0</y> 
     <width>421</width> 
     <height>381</height> 
    </rect> 
    </property> 
    <widget class="QWidget" name="gridStackedWidgetPage1"> 
    <layout class="QGridLayout" name="gridLayout"> 
     <property name="leftMargin"> 
     <number>10</number> 
     </property> 
     <property name="topMargin"> 
     <number>10</number> 
     </property> 
     <property name="rightMargin"> 
     <number>10</number> 
     </property> 
     <property name="bottomMargin"> 
     <number>10</number> 
     </property> 
     <property name="verticalSpacing"> 
     <number>25</number> 
     </property> 
     <item row="10" column="1"> 
     <widget class="QTextEdit" name="speed_label"> 
     <property name="layoutDirection"> 
     <enum>Qt::LeftToRight</enum> 
     </property> 
     <property name="readOnly"> 
     <bool>true</bool> 
     </property> 
     </widget> 
     </item> 
     <item row="6" column="1"> 
     <widget class="QPushButton" name="repeat"> 
     <property name="text"> 
     <string>REPEAT (SHIFT + R)</string> 
     </property> 
     <property name="shortcut"> 
     <string>Shift+R</string> 
     </property> 
     </widget> 
     </item> 
     <item row="3" column="0"> 
     <widget class="QPushButton" name="points"> 
     <property name="enabled"> 
     <bool>true</bool> 
     </property> 
     <property name="text"> 
     <string>CHOOSE POINTS (SHIFT + P) - PRESS COMMA (,)</string> 
     </property> 
     <property name="shortcut"> 
     <string>Shift+P</string> 
     </property> 
     </widget> 
     </item> 
     <item row="2" column="0"> 
     <widget class="QPushButton" name="start"> 
     <property name="text"> 
     <string>START (SHIFT + S)</string> 
     </property> 
     <property name="shortcut"> 
     <string>Shift+S</string> 
     </property> 
     </widget> 
     </item> 
     <item row="3" column="1"> 
     <widget class="QLineEdit" name="xy"> 
     <property name="maximumSize"> 
     <size> 
      <width>195</width> 
      <height>16777215</height> 
     </size> 
     </property> 
     </widget> 
     </item> 
     <item row="1" column="0"> 
     <widget class="QRadioButton" name="hide"> 
     <property name="text"> 
     <string>HIDE (SHIFT + H)</string> 
     </property> 
     <property name="shortcut"> 
     <string>Shift+H</string> 
     </property> 
     </widget> 
     </item> 
     <item row="6" column="0" rowspan="3"> 
     <widget class="QPlainTextEdit" name="list"/> 
     </item> 
     <item row="2" column="1"> 
     <widget class="QPushButton" name="stop"> 
     <property name="text"> 
     <string>STOP (SHIFT + SPACE)</string> 
     </property> 
     <property name="shortcut"> 
     <string>Shift+Space</string> 
     </property> 
     <property name="autoRepeat"> 
     <bool>false</bool> 
     </property> 
     </widget> 
     </item> 
     <item row="7" column="1"> 
     <widget class="QPushButton" name="repeat_off"> 
     <property name="text"> 
     <string>REPEAT OFF (SHIFT + F)</string> 
     </property> 
     <property name="shortcut"> 
     <string>Shift+F</string> 
     </property> 
     </widget> 
     </item> 
     <item row="1" column="1"> 
     <widget class="QRadioButton" name="off"> 
     <property name="text"> 
     <string>OFF (SHIFT + O)</string> 
     </property> 
     <property name="shortcut"> 
     <string>Shift+O</string> 
     </property> 
     </widget> 
     </item> 
     <item row="10" column="0"> 
     <widget class="QPushButton" name="speed"> 
     <property name="text"> 
     <string>SET SPEED (SHIFT + A)</string> 
     </property> 
     <property name="shortcut"> 
     <string>Shift+A</string> 
     </property> 
     </widget> 
     </item> 
     <item row="8" column="1"> 
     <widget class="QPushButton" name="clear"> 
     <property name="text"> 
     <string>CLEAR (SHIFT + C)</string> 
     </property> 
     <property name="shortcut"> 
     <string>Shift+C</string> 
     </property> 
     </widget> 
     </item> 
     <item row="11" column="0"> 
     <widget class="QPushButton" name="click_on"> 
     <property name="text"> 
     <string>MOUSE CLICK ON/OFF (SHIFT + M)</string> 
     </property> 
     <property name="shortcut"> 
     <string>Shift+M</string> 
     </property> 
     </widget> 
     </item> 
    </layout> 
    </widget> 
    </widget> 
    </widget> 
</widget> 
<layoutdefault spacing="6" margin="11"/> 
<resources/> 
<connections/> 
</ui> 

爲什麼有錯誤?

mainwindow.obj:-1:BLAD:LNK2019:在函數解析的外部符號__imp_GetForegroundWindow引用 「私人:無效__cdecl的MainWindow ::重複(無效)」(重複@主窗口@@ AEAAXXZ?)

mainwindow.obj:-1:BLAD:LNK2019:解析外部符號__imp_PostMessageW在函數引用 「私人:無效__cdecl的MainWindow ::重複(無效)」(?重複@主窗口@@ AEAAXXZ)

怎麼辦這個權利?我想在虛空中重複點擊鼠標在屏幕上(甚至外部應用程序)。這個怎麼做?

+0

請儘量減少這一點,擺脫'.h'文件和'.ui'文件 - 它們不是必需的。聲明和定義可以在一個文件中。您可以將小部件和佈局直接添加到「MainWindow」類。 –

+0

這是否應該只在您的Qt應用程序或其他應用程序中單擊? –

+0

在所有的應用程序,不僅在我的應用程序 –

回答

0

(發佈解決方案代表OP)

它現在有效。謝謝。我用:

LIBS += -luser32 
在我的項目文件

和:

mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); 
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); 

在我的代碼。