Как закрыть всплывающее окно из другого приложения скриптом Python - PullRequest
2 голосов
/ 25 апреля 2019

Я работаю в области автоматизации моделирования Aspen Plus и последующей обработки результатов с помощью Python.Для того, чтобы сделать масштабный анализ, исследования чувствительности и решения проблем оптимизации;Мне приходится несколько раз повторять запуск симуляции осины.

Таким образом, я использую win32com.client для управления им.Это прекрасно работает, но иногда Aspen показывает всплывающие окна, сообщающие, что все лицензии используются, прерывая поток программы:

issue

Если я закрою его вручную, программа продолжит работу,Поэтому я думаю написать сценарий для автоматизации этого, но я не имею ни малейшего понятия, как это сделать.

Я пытался убить, прекратить, отправить сигнал процессу.Но ничего не работает, потому что убить процесс AspenPlus.exe, останавливает программу.

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Вот пример кода PowerShell, который вы можете использовать, чтобы проверить, запущен ли процесс Aspen и открыто ли окно, чтобы закрыть его, отправив соответствующий ключ с помощью функции sendKey

$isAspenOpen = Get-Process Aspen*
if($isAspenOpen = $null){
    # Aspen is already closed run code here:
    }
else {
     $isAspenOpen = Get-Process AspenPlus*

     # while loop makes sure all Aspen windows are closed before moving on to other code:
         while($isAspenOpen -ne $null){
            Get-Process aspen* | ForEach-Object {$_.CloseMainWindow() | Out-Null }
            sleep 5
            If(($isAspenOpen = Get-Process aspen*) -ne $null){
            Write-Host "Aspen is Open.......Closing Aspen"
                $wshell = new-object -com wscript.shell
                $wshell.AppActivate("Aspen Plus")
                $wshell.Sendkeys("%(Esc)")
            $isAspenOpen = Get-Process Aspen*
            }
        }
        #Aspen has been closed run code here:
    }
1 голос
/ 25 апреля 2019

Спасибо Psychon Solutions!Оно работает!!Я использовал его из python следующим образом:

import win32com.client as win32

shell = win32.Dispatch("WScript.Shell")
shell.AppActivate("All licenses are in use")
shell.Sendkeys("%{F4}", 0)

Теперь мне нужно только улучшить код, чтобы автоматизировать задачу.

...