Ответы пользователя по тегу Автоматизация
  • Как можно сделать автозапуск скрипта?

    YaPA24
    @YaPA24
    IT эксперт
    Программа ReRuner параметр "имя процесса" - проверяет каждые 10 минут что процесс жив иначе запускает процесс заново.
    У нас реализована на старом паскале... :)
    Можно легко сделать и на питоне или C#
    Ответ написан
    Комментировать
  • Как привязать нажатия кнопок к окну?

    YaPA24
    @YaPA24
    IT эксперт
    Делал автокликер для игры, вот относительно универсальное простое решение.
    Чтобы не мучится в начале выскакивает окошко - тащишь его чтобы было над нужным окном и жми "ОК", далее скрипт копает и подбирает даже в неактивном окне...

    import threading, time
    import win32api, win32con, win32gui
    import pyautogui as pag
    import keyboard as kb
    import tkinter as tk
    
    def get_window_at_mouse_pos():
        x, y = win32api.GetCursorPos()
        window_id = win32gui.WindowFromPoint((x, y))
        return window_id
    
    def send_key(key_code, window_handle):
    #    win32api.SendMessage(window_handle, win32con.WM_CHAR, key_code, 0)
    #    win32api.PostMessage(window_handle, win32con.WM_CHAR, key_code, 0)
        pag.press(chr(key_code))
        print(key_code)
    
    def mining():
        while True:
            time.sleep(1)
            while is_e.get() == 1:
                send_key(ord('e'), window_handle)
                time.sleep(3)
                send_key(ord('q'), window_handle)
                time.sleep(65)
    
    root = tk.Tk()
    canvas1 = tk.Canvas(root, width=300, height=200, bg='lightsteelblue2', relief='raised')
    canvas1.pack()
    
    is_e = tk.IntVar()
    checkbox = tk.Checkbutton(root, text="Капать", variable=is_e, font=('helvetica', 18))
    canvas1.create_window(150, 160, window=checkbox)
    
    win32gui.MessageBox(None, 'start', 'Message Box', 0)
    window_handle = get_window_at_mouse_pos()
    print(window_handle)
    win32gui.SetForegroundWindow(window_handle) # hwnd
    threading.Thread(target=mining, daemon=True).start()
    
    root.mainloop()
    Ответ написан
  • Как остановить скрипт python используя сочетание клавиш из любого окна?

    YaPA24
    @YaPA24
    IT эксперт
    Все таки проще закрывать свою программу чем процессы по номеру.
    пример рабочего кода:
    import threading, time
    import keyboard as kb
    import tkinter as tk
    
    # Функция для выхода из программы по нажатию клавиши "Esc"
    def wait_exit():
        kb.wait('alt+s')
        time.sleep(1)
        root.destroy()
    
    def main():
        while stop:
            # основнаяпрограмма ...
            time.sleep(60)
    
    root = tk.Tk()
    # рисуем красивые кнопки и метки...
    
    threading.Thread(target=wait_exit, daemon=True).start()
    threading.Thread(target=main, daemon=True).start()
    
    root.mainloop()
    Ответ написан
    2 комментария
  • Кликер в свернутом окне?

    YaPA24
    @YaPA24
    IT эксперт
    Вот пример рабочего кода который жмёт e и q в неактивном окне добывает ресурс пока я зарабатываю реал:
    import win32api
    import win32con
    import win32gui
    import time
    
    def get_window_at_mouse_pos():
        x, y = win32api.GetCursorPos()
        window_handle = win32gui.WindowFromPoint((x, y))
        return window_handle
    
    def send_key(key_code, window_handle):
        win32api.PostMessage(window_handle, win32con.WM_CHAR, key_code, 0)
    
    def main():
        win32gui.MessageBox(None, 'start', 'Message Box', 0)
        window_handle = get_window_at_mouse_pos()
        send_key(69, window_handle) # e
        while True:
            send_key(69, window_handle) # e
            time.sleep(1)
            send_key(ord('q'), window_handle) # q
            time.sleep(5)
    
    if __name__ == '__main__':
        main()


    С кликами сложнее - по мимо нажатий нужны координаты и как правило требуется чтобы окно было активным...
    непроверенный код:
    # Задаем координаты клика
    x, y = 100, 100
    
    # Получаем размеры окна
    left, top, right, bottom = win32gui.GetWindowRect(hwnd)
    width, height = right - left, bottom - top
    
    # Вычисляем координаты клика относительно левого верхнего угла окна
    abs_x, abs_y = left + x * width // 100, top + y * height // 100
    
    # Устанавливаем фокус на окно, чтобы оно стало активным
    win32api.SetForegroundWindow(hwnd)
    
    # Отправляем сообщение нажатия левой кнопки мыши
    win32api.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, abs_y << 16 | abs_x)
    
    # Отправляем сообщение отпускания левой кнопки мыши
    win32api.SendMessage(hwnd, win32con.WM_LBUTTONUP, 0, abs_y << 16 | abs_x)
    Ответ написан
    Комментировать