Excalibur
Excalibur

Reputation: 44

How can i detect when program are closed?

I am open application via kernel32.CreateProcessW. After this i get PID and Handle of application. Now, I want to detect when application are closed.

I am using WaitForSingleObject. But it is return only 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()

Upvotes: 1

Views: 365

Answers (1)

Mark Tolonen
Mark Tolonen

Reputation: 177971

Returning 0 is the value of WAIT_OBJECT_0, meaning the hProcess handle has signaled process exit.

As my comment stated, On Windows 10 calc.exe is a stub program. It runs a different process (a Windows store app) and immediately exits. So you are detecting that program (calc.exe) closed. Change the code to use notepad.exe (a native windows app) which doesn't go on to launch a different app, and your script will wait until you close notepad.

Upvotes: 1

Related Questions