Найти - Пользователи
Полная версия: Как передать нажатия клавиш не активному окну?
Начало » Python для новичков » Как передать нажатия клавиш не активному окну?
1 2
Deon
 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()

вот такой есть код который нажимает клавиши потом кликает по координатам в определенное место и все по новой , но как сделать так чтобы эти операции выполнялись фоном не мешая выполнять мне другие задачи
PEHDOM
Deon
но как сделать так чтобы эти операции выполнялись фоном не мешая выполнять мне другие задачи
В такой реализации никак(если конечно не рассматривать поднятия виртуалки). Если вы работаете с другой программой через ГУИ, то у вас не получиться заниматься “своими делами” во время работы скрипта.Когда вы отправляете окну нажатие мыши или клавиатуры оно становиться активным. Или поднимайте виртуалку и на ней запускайте, или работайте с программой на уровне протоколов, если такое возможно.
Deon
PEHDOM
Те никак нельзя посылать команды не активному окну если оно не свернуто а просто на втором плане, я работаю в браузере а скрипт фоном выполняет компанды?
PEHDOM
Deon
Те никак нельзя посылать команды не активному окну если оно не свернуто а просто на втором плане, я работаю в браузере а скрипт фоном выполняет компанды?
не то чтобы совсем нельзя, но если вы отправите неактивному окну нажатие клавиши то оно станет активным.
Deon
PEHDOM
И нет никакой возможности заставить такой скрипт работать фоном?
Deon
PEHDOM
даже win32api
PEHDOM
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)
Deon
PEHDOM
Да так точно но я пытаюсь в своем примере нажать esc а меня выводит ошибку
esc = win32api.PostMessage(hwnd, win32con.VK_ESCAPE)
pywintypes.error: (1159, ‘PostMessage’, ‘Сообщение может быть использовано только с операциями синхронизации.’)
не понимаю чо он хочет?
PEHDOM
саоме простое что приходит в голову это заменить 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)
Deon
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 сек, ни ошибок ничего просто команда исполнена
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB