SetForegroundWindow () не работает, когда окно RDP к серверу свернуто или заблокировано - PullRequest
0 голосов
/ 08 марта 2019

Я работаю над проектом автоматизации, который требует от меня поиска процесса акробата, а затем выведения его на первый план. Я использую Windows Server 2012 R2 Standard и Python. Я ищу этот конкретный файл PDF в списке процессов, а затем пытаюсь вывести это окно на передний план.

Мой код работает нормально, когда сервер открыт и активен. Как только он свернут или заблокирован, он не работает. В частности, строка SetForegroundWindow () не работает и выдает ошибку "(0, 'SetForegroundWindow', 'Сообщение об ошибке недоступно')".

Далее я просмотрел множество примеров, перечисленных здесь, и кто-то предложил использовать вкладку «Alt» перед этой строкой. Попробовал, не сработало. Затем я использовал ShowWindow () в соответствии с другим пользователем, но затем снова появляется та же ошибка. Теперь я полностью застрял.

Я уже просмотрел множество тем, связанных с этой проблемой, таких как: 1. SetForegroundWindow не работает с свернутым процессом 2. Вывести на переднее окно, когда свернуто 3. Вывести на переднее окно при сворачивании

Я пытался MainWindowHandle мог исправить ошибку, но я не могу реализовать ее в Python.

Кроме того, я установил pywinauto и использовал функцию findwindows и SetForegroundWindow функции pywinauto. Он работает хорошо, когда сервер активен, но как только мы свернем или заблокируем сервер, он не будет работать и выдает ту же ошибку "(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 

1 Ответ

3 голосов
/ 08 марта 2019

Руководство по удаленному выполнению должно объяснить все, что вы можете сделать в этой ситуации.

...