#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include'lanrenapi.h'

QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE

class MainWindow : public QMainWindow { Q_OBJECT

public: MainWindow(QWidget *parent = nullptr); ~MainWindow();

static WNDPROC lpPrevWndFunc;

//自动判断编码格式
QString GetCorrectUnicode(const QByteArray &ba);
void clicked_bt_load(bool clicked);
void clicked_bt_save(bool clicked);
void clicked_bt_save_as(bool clicked);
void clicked_bt_replace(bool clicked);
static LRESULT CALLBACK func_Message(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

private: Ui::MainWindow *ui; HWND hwnd; }; #endif // MAINWINDOW_H

mainwindow.cpp文件 #include "mainwindow.h" #include "ui_mainwindow.h"

WNDPROC MainWindow::lpPrevWndFunc = nullptr; // 定义静态变量 lpPrevWndFunc

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) {

ui->setupUi(this);
//设置窗口透明度:
this->setWindowOpacity(0.8);
connect(ui->bt_load,&QPushButton::clicked,this,&clicked_bt_load);
connect(ui->bt_save,&QPushButton::clicked,this,&clicked_bt_save);
connect(ui->bt_save_as,&QPushButton::clicked,this,&clicked_bt_save_as);
connect(ui->bt_replace,&QPushButton::clicked,this,&clicked_bt_replace);
//获取窗口的句柄
HWND hwnd=(HWND)(this->winId());
//hook原始输入数据 键盘
if (lanrenAPI::hookRawInputData(hwnd,HID_USAGE_GENERIC_KEYBOARD)==0){

    QMessageBox::information(this,"错误!","创建原始键盘数据设备!");
}
//hook原始输入数据 鼠标
if (lanrenAPI::hookRawInputData(hwnd,HID_USAGE_GENERIC_MOUSE)==0){
 QMessageBox::information(this,"错误!","创建原始鼠标数据设备!");
}
WNDPROC  lpPrevWndFunc;
//建立消息机制,收到数据会通知
lpPrevWndFunc=(WNDPROC)SetWindowLongPtr(hwnd,GWLP_WNDPROC,(LONG_PTR)&func_Message);

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

void MainWindow::clicked_bt_load(bool clicked){

QString fileName= QFileDialog::getOpenFileName(this,"导入脚本","C:\\Users\\Administrator",tr("TEXT (*.txt)"));


//读取内容  放到textEdit中
//默认编码格式是 utf-8
QFile file(fileName);
//设置打开方式
file.open(QIODeviceBase::ReadOnly);

 while(!file.atEnd()){
     QByteArray array= file.readLine();
     QTextCodec * codec=QTextCodec::codecForName(GetCorrectUnicode(array).toLatin1());

     ui->pte_jb->moveCursor(QTextCursor::End);
     ui->pte_jb->insertPlainText(codec->toUnicode(array));
 }
 //关闭文件
 file.close();

 ui->cb_history->addItem(fileName);

} void MainWindow::clicked_bt_save(bool clicked){

QString  str=ui->pte_jb->toPlainText();
char*  ch;
QByteArray ba = str.toUtf8(); // must
ch=ba.data();

 QFile file(ui->cb_history->currentText());
 //写文件
 file.open(QIODevice::WriteOnly);
 file.write(ch);
 file.close();

} void MainWindow::clicked_bt_save_as(bool clicked){ QString fileName= QFileDialog::getSaveFileName(this,"另存脚本","C:\Users\Administrator",tr("TEXT (.txt)")); char ch; QByteArray ba = fileName.toUtf8(); // must ch=ba.data();

 QFile file(ui->cb_history->currentText());
 //写文件
 file.open(QIODevice::WriteOnly);
 file.write(ch);
 file.close();

}

void MainWindow::clicked_bt_replace(bool clicked){ LARGE_INTEGER start; QueryPerformanceCounter(&start);

lanrenAPI::setWindowsMousePenetrate(hwnd,true);
LARGE_INTEGER end;
QueryPerformanceCounter(&end);
qDebug() << end.QuadPart-start.QuadPart;

} LRESULT APIENTRY func_Message( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam) // second message parameter { if (uMsg==RID_INPUT){ RAWINPUT rawdata; GetRawInputData((HRAWINPUT)lParam,RID_INPUT,&rawdata,(PUINT)40,16); switch (rawdata.header.dwType) { case RIM_TYPEKEYBOARD: qDebug() <<"键盘数据到达";

    case RIM_TYPEMOUSE:
        qDebug() <<"鼠标数据到达";
    }
}

return CallWindowProcA (MainWindow::lpPrevWndFunc, hwnd, uMsg, wParam, lParam);

} //自动判断编码格式 QString MainWindow::GetCorrectUnicode(const QByteArray &ba) { QTextCodec::ConverterState state; QTextCodec *codec = QTextCodec::codecForName("UTF-8"); QString text = codec->toUnicode( ba.constData(), ba.size(), &state); if (state.invalidChars > 0) { text = QTextCodec::codecForName( "GBK" )->toUnicode(ba); return QString("GBK"); } else { text = ba; return QString("UTF-8"); } }

C++ Qt MainWindow 窗口设计与实现 - 鼠标键盘事件处理

原文地址: https://www.cveoy.top/t/topic/nr7l 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录