尝试了这段代码:
import win32gui
import win32con
windowID = win32gui.FindWindow(None, "testing.pdf - Adobe Acrobat Pro DC")
#win32gui.SetForegroundWindow(windowID)
win32gui.SendMessage(windowID, win32con.WM_KEYDOWN, win32con.VK_NEXT, 0) #VK_NEXT is Page Down button
上述代码仅在取消注释
SetForegroundWindow
行时有效。有没有办法在不使窗口获得焦点的情况下发送按键?我希望在我的脚本在后台执行任务时保持终端处于焦点状态。(主要是发送不同的按键,如ctrl+Tab
、pgDn/pgUp
等)。编辑 - 建议的问题并没有回答我的问题,因为那里的解决方案会将目标窗口置于焦点。我想让目标窗口保持在后台。
感谢@Vasily Ryabov,现在该代码甚至可以与PyWinAuto一起使用。 :) 这是最终可行的代码:
import time
import pywinauto
app = pywinauto.Application(backend="win32").start(r"C:\Program Files (x86)\Adobe\Acrobat DC\Acrobat\Acrobat.exe")
time.sleep(10)
print('sleeping over')
Wizard = app['testing.pdf - Adobe Acrobat Pro DC']
while True:
Wizard.send_keystrokes("{VK_NEXT}")
time.sleep(1)
我认为问题在于我使用了
type_keys
方法,而不是send_keystrokes
。此外,在win32
和uia
之间来回切换也有助于我找到正确的方法。对于Acrobat DC Pro,win32
可行。感谢@Vasily Ryabov提供的出色帮助和他的精彩Python库PyWinAuto! :)
Wizard.type_keys("{VK_NEXT}")
时,那个窗口会获得焦点,终端会进入后台。我如何在不失去终端焦点的情况下发送按键?这是我的完整代码:https://pastebin.com/dQH9hYJN - English Rainsend_chars
和send_keystrokes
方法吗?type_keys
方法会将窗口置于焦点。抱歉,可能指向了不完整的答案。 - Vasily Ryabov