当RDP窗口到服务器最小化或锁定时,SetForegroundWindow()未运行

2024-05-16 00:05:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个自动化项目,需要我搜索一个杂技进程,然后把它带到前台。我正在使用Windows Server 2012 R2 Standard和Python。我在进程列表中搜索特定的PDF文件,然后尝试将该窗口置于前台。在

当服务器打开并处于活动状态时,我的代码运行良好。一旦最小化或锁定,它就不工作了。具体地说,SetForegroundWindow()行不起作用,并引发错误“(0,'SetForegroundWindow,'No error message is available')”。在

接下来,我查看了这里列出的许多示例,有人建议在这行之前使用'Alt'选项卡。试过了,没用。然后我根据另一个用户使用了ShowWindow(),但是同样的错误再次出现。现在,我完全被卡住了。在

我已经查看了许多与此问题相关的线程,例如: 1SetForegroundWindow doesn't work with minimized process 2Bring to forward window when minimized 三。Bring to forward window when minimized

我试过MainWindowHandle可以修复这个错误,但是我不能用python实现它。在

另外,我安装了pywinauto,并使用了pywinauto的findwows和setforegroundindow函数。当服务器处于活动状态时,它工作得很好,但是一旦我们最小化或锁定服务器,它就不能工作,并给出相同的错误“(0,'SetForegroundWindow,'No error message is available')”。在

现在,我完全没有选择了。有什么想法/建议吗?在

以下是片段:

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 

Tags: ofnameimport服务器pdfwindowstop错误