我正在从事一个自动化项目,该项目需要我搜索acrobat流程,然后将其带到前台。我正在使用Windows Server 2012 R2 Standard和Python。我在进程列表中搜索该特定的PDF文件,然后尝试将该窗口置于前台。
当服务器打开并处于活动状态时,我的代码运行良好。一旦最小化或锁定它,它就不起作用。具体来说,该行SetForegroundWindow()不起作用,并引发错误“((0,'SetForegroundWindow','没有可用的错误消息')”。
接下来,我浏览了此处列出的许多示例,有人建议在该行之前使用“ Alt”选项卡。尝试过,没有用。然后我根据另一个用户使用了ShowWindow(),但是同样的错误再次出现。现在,我完全被困住了。
我已经查看了许多与该问题相关的主题,例如: 1. SetForegroundWindow doesn't work with minimized process 2. Bring to forward window when minimized 3. Bring to forward window when minimized
我尝试过MainWindowHandle可以修复错误,但是我无法在python中实现它。
此外,我安装了pywinauto并使用了pywinauto的findwindows和SetForegroundWindow函数。当服务器处于活动状态时,它可以很好地工作,但是一旦我们最小化或锁定服务器,它就无法工作并给出相同的错误“(0,'SetForegroundWindow','没有可用的错误消息')”。
现在,我完全无法选择了。有什么想法/建议吗?
以下是代码段:
import win32gui,win32con
import win32com.client
import time
time.sleep(3)
def windowEnumerationHandler(hwnd, top_windows):
if win32gui.IsWindowVisible(hwnd) and win32gui.GetWindowText(hwnd)!='':
top_windows.append((hwnd, win32gui.GetWindowText(hwnd)))
results = []
top_windows = []
file_name_of_pdf = "ARW_AR_2016.pdf"
win32gui.EnumWindows(windowEnumerationHandler, top_windows)
for i in top_windows:
if i[1].find(file_name_of_pdf[:len(file_name_of_pdf)-4])>-1:
print(i)
shell = win32com.client.Dispatch("WScript.Shell")
win32gui.ShowWindow(i[0],9)
try:
shell.SendKeys('%')
win32gui.ShowWindow(i[0], win32con.SW_RESTORE)
win32gui.SetForegroundWindow(i[0])
except Exception as e:
print(1,e)
try:
shell.SendKeys('%')
win32gui.SetForegroundWindow(i[0])
except Exception as r:
print(2,r)
pass