【问题标题】:SetForegroundWindow() not running when RDP window to server minimized or locked当 RDP 窗口到服务器最小化或锁定时,SetForegroundWindow() 未运行
【发布时间】:2019-03-08 12:15:58
【问题描述】:

我正在从事一个自动化项目,该项目需要我搜索 acrobat 进程,然后将其置于前台。我正在使用 Windows Server 2012 R2 Standard 和 Python。我在进程列表中搜索该特定 PDF 文件,然后尝试将该窗口置于前台。

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

接下来,我浏览了此处列出的许多示例,有人建议在该行之前使用“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','没有可用的错误消息')”。

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

这里是sn-p:

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 

【问题讨论】:

  • “一旦最小化或锁定”是什么意思?什么被锁定?桌面?什么被最小化了?您的应用程序还是 Acrobat?
  • 所以我在远程桌面和本地桌面上工作。如果我运行代码并最小化服务器,那么它就不起作用。能拿到吗?
  • “服务器”这个词有很多含义。当您说“最小化服务器”时,您的意思是“最小化 RDP 客户端主窗口”吗?你到底在减少什么?
  • 是的,RDP 客户端主窗口已最小化。
  • 这个 python 代码是在本地机器上运行,还是在 RDP 会话中运行?

标签: python window win32gui pywinauto setforegroundwindow


【解决方案1】:

Remote Execution Guide 应该解释你在这种情况下可以做的一切。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 2018-08-24
    相关资源
    最近更新 更多