Как я могу определить, когда программа закрыта? - PullRequest
0 голосов
/ 12 июня 2019

Я открываю приложение через kernel32.CreateProcessW. После этого я получаю PID и дескриптор приложения. Теперь я хочу определить, когда приложение закрыто.

Я использую WaitForSingleObject. Но это только возврат 0.

from ctypes import *
from defines import *
from datetime import *
import time

kernel32     = windll.kernel32

class test():
    def __init__(self):
        self.hProcess   = None


    def load(self):
        creation_flags      = CREATE_NEW_CONSOLE
        startupinfo         = STARTUPINFO()
        process_information = PROCESS_INFORMATION()

        startupinfo.cb      = sizeof(startupinfo)

        if kernel32.CreateProcessW('C:\\Windows\\System32\\calc.exe',
                                    None,
                                    None,
                                    None,
                                    None,
                                    creation_flags,
                                    None,
                                    None,
                                    byref(startupinfo),
                                    byref(process_information)):
            self.hProcess = process_information.hProcess
            print('CALC PID: {0}, Handle: {1}'.format(process_information.dwProcessId, process_information.hProcess))
        else:
            print('Error while opening process')

    def waitfor(self):
        print(kernel32.WaitForSingleObject(self.hProcess, 0xFFFFFFFF))

s = test()

s.load()
s.waitfor()

1 Ответ

1 голос
/ 13 июня 2019

Возвращение 0 - это значение WAIT_OBJECT_0, означающее, что дескриптор hProcess сигнализировал о выходе из процесса.

Как указано в моем комментарии, в Windows 10 calc.exe - программа-заглушка.Он запускает другой процесс (приложение для магазина Windows) и немедленно завершает работу .Таким образом, вы обнаруживаете , что программа (calc.exe) закрыта.Измените код на использование notepad.exe (собственное приложение для Windows), которое не запускается для запуска другого приложения, и ваш сценарий будет ждать, пока вы не закроете блокнот.

...