Форум сайта python.su
Доброе время суток!
Задача следующая:
1. Вызваем внешнее приложение.
2. Посылаем ему сообщение, что нажаты определенные клавиши.
Со второй задачей, к сожалению, через win32gui.SendMessage(…) не справился. Использую SendKeys. Если кто подскажет как сообщить приложению, что нажаты, скажем ALT+R, буду весьма признателен.
Основной вопрос в следующем. Вот мой код
import os
import SendKeys
import win32gui
arg=['']
wdir='C:\\Test\\'
Appl_path='C:\\Program1\\first.exe'
os.chdir(wdir)
os.spawnv(os.P_NOWAIT,Appl_path,arg)
#os.system(Appl_path)
#os.execv(Appl_path,arg)
#os.startfile(Appl_path)
hwnd=win32gui.FindWindow(aaa,bbb)
win32gui.SetForegroundWindow(hwnd)
SendKeys.SendKeys("""
%{r}{ENTER}
""")
Отредактировано (Март 13, 2009 14:35:36)
Офлайн
Ну все правильно… Если приложение не запущено, то нет и хэндлера его окна…
Офлайн
Так приложение я командой os.spawnv(…) запускаю
Отредактировано (Март 13, 2009 15:05:40)
Офлайн
Приложение ещё не стартануло - надо дождаться его старта - типа:
...
import time
while 1:
hwnd=win32gui.FindWindow(aaa,bbb)
win32gui.SetForegroundWindow(hwnd)
break
except NameError:
time.wait(0.1)
...
Офлайн
Спасибо, вот так все работает.
import os
import SendKeys
import win32gui
arg=['']
wdir='C:\\Test\\'
Appl_path='C:\\Program1\\first.exe'
os.chdir(wdir)
os.spawnv(os.P_NOWAIT,Appl_path,arg)
while 1:
try:
hwnd=win32gui.FindWindow(aaa,bbb)
win32gui.SetForegroundWindow(hwnd)
SendKeys.SendKeys("""
%{r}{ENTER}
""")
break
except win32gui.error:
time.sleep(0.1)
Офлайн
MottleНе ведомо мне - я с похожими проблемками разбирался исключительно из С++ под QT а не Windows, кроме того в одном из окон приложения читал событя из сокета а в другом посылал в сокет не особо разбираясь в путаных API. :) Легче потом разделять приложение на одно окно на одной тачке - другое окно на соседней тачке - а приложение суть одно.
А не подскажете тогда, как оформить SendMessage() к этому окну, чтобы передать нажатие ALT+R?
Офлайн
Маздай оно конечно хорошо бы, но работать как-то надо )))
С задачей справился с помощью пакета pywinauto.
По-моему, очень изящно вышло:
import os
from pywinauto import application
wdir='C:\\Test\\'
Appl_path='C:\\Program1\\first.exe'
os.chdir(wdir)
app = application.Application()
app.Start_(Appl_path)
app.Appl.DrawOutline()
app.Appl.MenuSelect("Read")
app.Appl.MenuSelect("Quit")
Отредактировано (Март 13, 2009 21:00:43)
Офлайн
Так же советую посмотреть на pywinauto я немного разобрался(не без помощи форума)
Офлайн