Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 17, 2017 12:14:03

Deon
Зарегистрирован: 2016-12-09
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать нажатия клавиш не активному окну?

 import pyautogui
import time
while True:
    time.sleep(3)
    pyautogui.keyDown('space')
    time.sleep(1.5)
    pyautogui.keyUp('space')
    time.sleep(0)
    pyautogui.keyDown('space')
    w=0
    while w!=30:
        pyautogui.keyDown('enter')
        time.sleep(0.1)
        pyautogui.keyUp('enter')
        time.sleep(2)
        w+=1
    time.sleep(20)
    pyautogui.keyUp('space')
    x, y = 1068, 950
    pyautogui.moveTo(x, y)
    pyautogui.click()

вот такой есть код который нажимает клавиши потом кликает по координатам в определенное место и все по новой , но как сделать так чтобы эти операции выполнялись фоном не мешая выполнять мне другие задачи

Офлайн

#2 Сен. 17, 2017 16:52:56

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как передать нажатия клавиш не активному окну?

Deon
но как сделать так чтобы эти операции выполнялись фоном не мешая выполнять мне другие задачи
В такой реализации никак(если конечно не рассматривать поднятия виртуалки). Если вы работаете с другой программой через ГУИ, то у вас не получиться заниматься “своими делами” во время работы скрипта.Когда вы отправляете окну нажатие мыши или клавиатуры оно становиться активным. Или поднимайте виртуалку и на ней запускайте, или работайте с программой на уровне протоколов, если такое возможно.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Сен. 17, 2017 19:11:13

Deon
Зарегистрирован: 2016-12-09
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать нажатия клавиш не активному окну?

PEHDOM
Те никак нельзя посылать команды не активному окну если оно не свернуто а просто на втором плане, я работаю в браузере а скрипт фоном выполняет компанды?

Офлайн

#4 Сен. 17, 2017 19:34:44

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как передать нажатия клавиш не активному окну?

Deon
Те никак нельзя посылать команды не активному окну если оно не свернуто а просто на втором плане, я работаю в браузере а скрипт фоном выполняет компанды?
не то чтобы совсем нельзя, но если вы отправите неактивному окну нажатие клавиши то оно станет активным.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#5 Сен. 17, 2017 21:55:21

Deon
Зарегистрирован: 2016-12-09
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать нажатия клавиш не активному окну?

PEHDOM
И нет никакой возможности заставить такой скрипт работать фоном?

Офлайн

#6 Сен. 18, 2017 12:05:04

Deon
Зарегистрирован: 2016-12-09
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать нажатия клавиш не активному окну?

PEHDOM
даже win32api

Офлайн

#7 Сен. 18, 2017 12:49:46

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как передать нажатия клавиш не активному окну?

Deon
даже win32api
Походу winapi позволяет провернуть такую штуку через PostMessage, по крайней мере, вот такой пример работает, даже если окно свернуто. И никак не мешает работе:
 import win32gui
import win32con
import win32api
from time import sleep
from ctypes.wintypes import POINT
hwndMain = win32gui.FindWindow("Notepad", None)
hwndChild = win32gui.GetWindow(hwndMain, win32con.GW_CHILD)
pt = POINT()
pt.x = 80
pt.y = 80
lParam = (pt.y << 16) | pt.x
while True:
    temp = win32api.PostMessage(hwndChild, win32con.WM_CHAR, 0x44, 0)  # печатаем букву D
    win32api.PostMessage(hwndChild, win32con.WM_LBUTTONDOWN, 0x0001, lParam) # левая кнопка мыши нажата
    win32api.PostMessage(hwndChild, win32con.WM_LBUTTONUP, 0x0001, lParam) # левая кнопка мыши отпущена
    print(temp)
    sleep(1)



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Сен. 18, 2017 12:59:44)

Офлайн

#8 Сен. 19, 2017 06:07:45

Deon
Зарегистрирован: 2016-12-09
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать нажатия клавиш не активному окну?

PEHDOM
Да так точно но я пытаюсь в своем примере нажать esc а меня выводит ошибку
esc = win32api.PostMessage(hwnd, win32con.VK_ESCAPE)
pywintypes.error: (1159, ‘PostMessage’, ‘Сообщение может быть использовано только с операциями синхронизации.’)
не понимаю чо он хочет?

Офлайн

#9 Сен. 19, 2017 09:58:16

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Как передать нажатия клавиш не активному окну?

саоме простое что приходит в голову это заменить PostMessage на SendMessage
Функция PostMessage помещает сообщение в очередь сообщений, связанную с потоком который создал заданное окно, а SendMessage отправляет сообщенеие окну как только, так сразу.Синтаксис у них одинаковый.

Deon
win32api.PostMessage(hwnd, win32con.VK_ESCAPE)
вы уверены что оно должно так работать? я вот пробую у мен тоже таже куйня вылазит про операцию синхронизации, а вот так вполне работает:
      
win32api.PostMessage(hwndChild, win32con.WM_KEYDOWN, 0x1B, 0)
win32api.PostMessage(hwndChild, win32con.WM_KEYUP, 0x1B, 0)



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Сен. 19, 2017 10:26:20)

Офлайн

#10 Сен. 19, 2017 13:12:27

Deon
Зарегистрирован: 2016-12-09
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать нажатия клавиш не активному окну?

PEHDOM
саоме простое что приходит в голову это заменить PostMessage на SendMessageФункция PostMessage помещает сообщение в очередь сообщений, связанную с потоком который создал заданное окно, а SendMessage отправляет сообщенеие окну как только, так сразу.Синтаксис у них одинаковый.
import win32api, win32gui, win32con
import time

hwnd = win32gui.FindWindow(None, ‘FishingPlanet’)
hwndChild = win32gui.GetWindow(hwnd, win32con.GW_CHILD)
win32api.PostMessage(hwndChild, win32con.WM_KEYDOWN, 0x20, 0)
time.sleep(1.5)
win32api.PostMessage(hwndChild, win32con.WM_KEYUP, 0x20, 0)

чет нефига не получается отправить команду нажать пробел в течении 1.5 сек, ни ошибок ничего просто команда исполнена

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version