Альтернатива pyautogui

Кирилл696

Новичок
Пользователь
Апр 3, 2022
7
0
1
Есть ли в питоне альтернатива модуля pyautogui, работа которого могла бы идти в фоновом режиме? Задача: Написать программу, которая бы писала в любом окне одну букву в секунду, и чтобы работала эта программа в фоновом режиме.
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
так, а чем pyautogui не устраивает?
Запусти скрипт в фоне и все
 

Кирилл696

Новичок
Пользователь
Апр 3, 2022
7
0
1
Дело в том, чтобы печаталось сообщение в строке нужной, нужно задать координаты этой точки на экране, и если при работающем скрипте открыть любое другое окно, программа прекращает работу, потому что открыто уже другое окно
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
можно попробовать через win api
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
Дело в том, чтобы печаталось сообщение в строке нужной, нужно задать координаты этой точки на экране, и если при работающем скрипте открыть любое другое окно, программа прекращает работу, потому что открыто уже другое окно
То есть ты хочешь чтобы текст набирался в фоновом окне?
 

Кирилл696

Новичок
Пользователь
Апр 3, 2022
7
0
1
Да, именно так, подскажите как это можно сделать?
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
971
219
43
20
Москва
Думаю прямого решения нет, единственное что нашел: https://ru.stackoverflow.com/questions/1157140/Эмуляция-клавиатуры-в-свернутых-окнах
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
Да, именно так, подскажите как это можно сделать?
у каждого окна есть поток ввода вывода, через вин апи можно к ним обратиться, и будет получен тот эффект который вам нужен
пример (пишем в блокнот букву d всегда, не важно, активно оно или нет, свернуто или нет), слип не обязателен, для наглядности
Python:
import win32gui
import win32con
import win32api
from time import sleep

hwndMain = win32gui.FindWindow("Notepad", None)
hwndChild = win32gui.GetWindow(hwndMain, win32con.GW_CHILD)
while True:
    temp = win32api.PostMessage(hwndChild, win32con.WM_CHAR, 0x44, 0)  # печатаем букву D
    print(temp)
    sleep(1)
 
  • Мне нравится
Реакции: Vershitel_sudeb

Кирилл696

Новичок
Пользователь
Апр 3, 2022
7
0
1
у каждого окна есть поток ввода вывода, через вин апи можно к ним обратиться, и будет получен тот эффект который вам нужен
пример (пишем в блокнот букву d всегда, не важно, активно оно или нет, свернуто или нет), слип не обязателен, для наглядности
Python:
import win32gui
import win32con
import win32api
from time import sleep

hwndMain = win32gui.FindWindow("Notepad", None)
hwndChild = win32gui.GetWindow(hwndMain, win32con.GW_CHILD)
while True:
    temp = win32api.PostMessage(hwndChild, win32con.WM_CHAR, 0x44, 0)  # печатаем букву D
    print(temp)
    sleep(1)
А подскажите пожалуйста, а что за дочерний дескриптор окна: hwndChild. Что это такое, и что за второй параметр?
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
А подскажите пожалуйста, а что за дочерний дескриптор окна: hwndChild. Что это такое, и что за второй параметр?
в случае с блокнотом это поле ввода, можно обратиться на прямую к элементу, если знать его имя
чтобы узнать имя элемента, можно использовать утилиту spy++, я только не помню, можно ли ее скачать отдельно, или она входит в SDK или WDK

про второй параметр можно почитать тут https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindow
 

Кирилл696

Новичок
Пользователь
Апр 3, 2022
7
0
1
в случае с блокнотом это поле ввода, можно обратиться на прямую к элементу, если знать его имя
чтобы узнать имя элемента, можно использовать утилиту spy++, я только не помню, можно ли ее скачать отдельно, или она входит в SDK или WDK

про второй параметр можно почитать тут https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindow
Еще вопрос, с блокнотом разобрался, но когда начал пробовать с браузером, чтобы программа писала например в адресную строку не получается совсем, дескриптор окна хрома найти смог, но как получить дескриптор адресной строки не понимаю.... Или не с адресной строкой, а любого другого окна, где можно писать в хроме
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
Еще вопрос, с блокнотом разобрался, но когда начал пробовать с браузером, чтобы программа писала например в адресную строку не получается совсем, дескриптор окна хрома найти смог, но как получить дескриптор адресной строки не понимаю.... Или не с адресной строкой, а любого другого окна, где можно писать в хроме
с блокнотом это был пример, что такое возможно...

с другими окнами так просто не получиться, нужно проводить исследование, через spy++ смотреть, как окно построено, какие событие обрабатывает, какие не обрабатывает, это занятие не быстрое...
ну и вин апи на питоне, это изврат, проще делать на с++, так как писать придется полностью на вин апи
 

Кирилл696

Новичок
Пользователь
Апр 3, 2022
7
0
1
с блокнотом это был пример, что такое возможно...

с другими окнами так просто не получиться, нужно проводить исследование, через spy++ смотреть, как окно построено, какие событие обрабатывает, какие не обрабатывает, это занятие не быстрое...
ну и вин апи на питоне, это изврат, проще делать на с++, так как писать придется полностью на вин апи
Понял, печально... Видимо придется идти учить c++
 

Форум IT Специалистов