Asas_Test_Macro

 avatar
unknown
python
2 months ago
4.9 kB
5
Indexable
import sys
import time
import interception

from PyQt5 import QtCore, QtWidgets
from deneme_python import Ui_MainWindow


class MacroWorker(QtCore.QObject):
    finished = QtCore.pyqtSignal()

    def __init__(self, cycle_gap_ms=0):
        super().__init__()
        self.running = False
        self.cycle_gap_s = max(0, cycle_gap_ms) / 1000.0

    def tap_key(self, key, hold_ms=10, after_ms=0):
        interception.press(key)

        if hold_ms > 0:
            time.sleep(hold_ms / 1000.0)

        if after_ms > 0:
            time.sleep(after_ms / 1000.0)

    @QtCore.pyqtSlot()
    def run(self):
        self.running = True

        while self.running:
            # Arduino mantığı:
            # dış blok 6 kez tekrar etsin
            for _ in range(6):
                if not self.running:
                    break

                # 2,3,4,5,6 sıralı vuruş
                for key in ["2", "3", "4", "5", "6"]:
                    if not self.running:
                        break
                    self.tap_key(key, hold_ms=10)

                # r tuşu 56 kez
                for _ in range(56):
                    if not self.running:
                        break
                    self.tap_key("r", hold_ms=10, after_ms=5)

            # Bir tam blok bittikten sonra ekstra bekleme istenirse
            if self.running and self.cycle_gap_s > 0:
                time.sleep(self.cycle_gap_s)

        self.finished.emit()

    def stop(self):
        self.running = False


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        interception.auto_capture_devices()

        self.worker_thread = None
        self.worker = None

        self.setWindowTitle("Macro Panel")

        self.ui.pushButton.setText("Başlat")
        self.ui.pushButton_2.setText("Durdur")

        self.ui.pushButton_2.setStyleSheet("""
            QPushButton {
                background-color: red;
                color: white;
                font-weight: bold;
            }
            QPushButton:hover {
                background-color: darkred;
            }
        """)

        # Input alanını koruyoruz
        self.label_interval = QtWidgets.QLabel(self.ui.centralwidget)
        self.label_interval.setGeometry(QtCore.QRect(45, 160, 150, 24))
        self.label_interval.setText("Blok sonu süre (ms):")

        self.input_interval = QtWidgets.QLineEdit(self.ui.centralwidget)
        self.input_interval.setGeometry(QtCore.QRect(185, 160, 70, 24))
        self.input_interval.setText("0")

        self.ui.pushButton.show()
        self.ui.pushButton_2.hide()
        self.statusBar().showMessage("Hazır")

        self.ui.pushButton.clicked.connect(self.start_macro)
        self.ui.pushButton_2.clicked.connect(self.stop_macro)

    def get_cycle_gap_ms(self):
        text = self.input_interval.text().strip()

        if not text:
            return 0

        try:
            value = int(text)
            return max(0, value)
        except ValueError:
            return 0

    def start_macro(self):
        if self.worker is not None:
            return

        cycle_gap_ms = self.get_cycle_gap_ms()

        self.input_interval.setEnabled(False)

        self.ui.pushButton.hide()
        self.ui.pushButton_2.show()
        self.statusBar().showMessage(
            f"Makro çalışıyor | Blok sonu süre: {cycle_gap_ms} ms"
        )

        self.worker_thread = QtCore.QThread()
        self.worker = MacroWorker(cycle_gap_ms=cycle_gap_ms)

        self.worker.moveToThread(self.worker_thread)
        self.worker_thread.started.connect(self.worker.run)
        self.worker.finished.connect(self.worker_thread.quit)
        self.worker.finished.connect(self.worker.deleteLater)
        self.worker_thread.finished.connect(self.on_worker_finished)
        self.worker_thread.finished.connect(self.worker_thread.deleteLater)

        self.worker_thread.start()

    def stop_macro(self):
        if self.worker is not None:
            self.worker.stop()

    def on_worker_finished(self):
        self.worker = None
        self.worker_thread = None

        self.input_interval.setEnabled(True)

        self.ui.pushButton_2.hide()
        self.ui.pushButton.show()
        self.statusBar().showMessage("Makro durdu")

    def closeEvent(self, event):
        if self.worker is not None:
            self.worker.stop()

        if self.worker_thread is not None:
            self.worker_thread.quit()
            self.worker_thread.wait()

        event.accept()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
Editor is loading...
Leave a Comment