From a6d962fec45cbfe7dc4c0946dc07fb6e02bdb565 Mon Sep 17 00:00:00 2001 From: AJIOE1111 Date: Wed, 4 Dec 2024 18:47:53 +0300 Subject: [PATCH] fix lost window --- .gitignore | 5 ++++ README.md | 75 +++++++++++++++++++++++++++++++++++++++++------------- script.py | 41 +++++++++++++++++------------ 3 files changed, 87 insertions(+), 34 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cf39b12 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +dist +build +script.spec +.zip +release* \ No newline at end of file diff --git a/README.md b/README.md index 83dc26b..24244ca 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,3 @@ -# AutoClicker & Key Presser - -![Interface Screenshot](interface.jpg) ## Описание @@ -13,6 +10,8 @@ - Сбрасывать все удержания одной кнопкой. - Поддерживает горячие клавиши для управления. +--- + ## Скриншот интерфейса ![Интерфейс программы](interface.jpg) @@ -29,27 +28,39 @@ - `Alt + E`: Удержание клавиши `E`. - **Список активных действий**: Интуитивный интерфейс показывает, какие действия активны. - **Кнопка сброса**: Быстро завершает все удержания. +- **Автопроверка окон**: Программа продолжит работать даже если целевое окно не найдено. --- -## Установка +## Установка и запуск + +Вы можете скачать готовую сборку в разделе **Releases** или использовать Python для запуска программы. + +### 1. Скачивание готовой версии (.exe) +1. Перейдите в раздел **[Releases](https://github.com/ajioe1111/autoclicker-keypresser/releases)**. +2. Скачайте последний релиз (например, `AutoClicker-KeyPresser-v1.0.0.zip`). +3. Распакуйте архив. +4. Запустите файл `AutoClicker-KeyPresser.exe`. -1. **Клонируйте репозиторий**: - ```bash - git clone https://github.com/ajioe1111/autoclicker-keypresser - cd autoclicker-keypresser - ``` +### 2. Запуск из исходного кода +Если вы хотите запустить программу из исходного кода, выполните следующие шаги: -2. **Установите зависимости**: - Убедитесь, что у вас установлен Python 3.8+. - ```bash - pip install -r requirements.txt - ``` +#### Клонирование репозитория: +```bash +git clone https://github.com/ajioe1111/autoclicker-keypresser +cd autoclicker-keypresser +``` -3. **Запустите программу**: - ```bash - python script.py - ``` +#### Установка зависимостей: +Убедитесь, что у вас установлен Python 3.8+. +```bash +pip install -r requirements.txt +``` + +#### Запуск программы: +```bash +python script.py +``` --- @@ -64,6 +75,15 @@ --- +## Горячие клавиши + +- **Alt + ЛКМ**: Включить/выключить удержание ЛКМ. +- **Alt + W**: Удержание клавиши `W`. +- **Alt + S**: Удержание клавиши `S`. +- **Alt + E**: Удержание клавиши `E`. + +--- + ## Зависимости Список используемых библиотек: @@ -75,7 +95,26 @@ --- +## Известные проблемы + +- Если окно игры не найдено, программа продолжит работать, но удержание ЛКМ или клавиш не будет активным. +- В некоторых играх античиты могут блокировать взаимодействие с эмуляцией событий клавиатуры и мыши. + +--- + ## Лицензия MIT License © 2024 [AJIOE1111](https://github.com/ajioe1111) +``` + +--- + +### Что нового в этом `README.md`: +1. **Добавлена секция про готовую сборку**: + - Пользователи могут скачать `.exe` из раздела **Releases**. + +2. **Подробная инструкция для релиза**: + - Ссылки на раздел **Releases** с пояснением, как скачать и использовать готовую программу. +3. **Известные проблемы**: + - Добавлены ограничения, связанные с отсутствием окна или работой античитов. diff --git a/script.py b/script.py index 98179ed..25b7d05 100644 --- a/script.py +++ b/script.py @@ -75,17 +75,20 @@ def toggle_key(hwnd, key, key_code): threading.Thread(target=press_inactive_key, args=(hwnd, key_code), daemon=True).start() -def setup_mouse_and_key_hooks(hwnd): +def setup_mouse_and_key_hooks(hwnd=None): """Настройка горячих клавиш для мыши и клавиатуры.""" - mouse.on_button( - lambda: toggle_holding(hwnd) if keyboard.is_pressed('alt') else None, - buttons=('left',), - types=('down',) - ) - - keyboard.add_hotkey("alt+w", lambda: toggle_key(hwnd, "W", 0x57)) # VK_CODE для W - keyboard.add_hotkey("alt+s", lambda: toggle_key(hwnd, "S", 0x53)) # VK_CODE для S - keyboard.add_hotkey("alt+e", lambda: toggle_key(hwnd, "E", 0x45)) # VK_CODE для E + if hwnd: + mouse.on_button( + lambda: toggle_holding(hwnd) if keyboard.is_pressed('alt') else None, + buttons=('left',), + types=('down',) + ) + + keyboard.add_hotkey("alt+w", lambda: toggle_key(hwnd, "W", 0x57)) # VK_CODE для W + keyboard.add_hotkey("alt+s", lambda: toggle_key(hwnd, "S", 0x53)) # VK_CODE для S + keyboard.add_hotkey("alt+e", lambda: toggle_key(hwnd, "E", 0x45)) # VK_CODE для E + else: + print("Горячие клавиши работают, но окно игры не найдено.") def reset_all(): @@ -106,7 +109,7 @@ def update_active_actions(): active_list.insert(tk.END, "Нет активных действий") -def create_interface(hwnd): +def create_interface(hwnd=None): """Создание графического интерфейса.""" global status_label, active_list @@ -117,7 +120,14 @@ def create_interface(hwnd): root.resizable(False, False) # Запрет на изменение размера # Метка состояния - status_label = tk.Label(root, text="Статус: Управление", font=("Arial", 14), fg="blue") + if hwnd: + status_text = "Статус: Управление" + status_color = "blue" + else: + status_text = "Статус: Окно не найдено" + status_color = "red" + + status_label = tk.Label(root, text=status_text, font=("Arial", 14), fg=status_color) status_label.pack(pady=10) # Список активных действий @@ -162,12 +172,11 @@ def main(): game_title = "War" # Укажите часть названия окна игры window = find_game_window(game_title) + hwnd = window._hWnd if window else None if not window: print("Игра не найдена. Убедитесь, что окно запущено.") - return - - hwnd = window._hWnd - print(f"Найдено окно: {window.title}") + else: + print(f"Найдено окно: {window.title}") # Настраиваем горячие клавиши мыши и клавиатуры setup_mouse_and_key_hooks(hwnd)