Как завершить процесс и закрыть диалоговое окно программы

Пишу программу на MASM64, цель программы запустить процесс calc.exe (обычный калькулятор виндовс) и по истечении 10 секунд завершить этот процесс. Я ожидаю, что после завершения процесса программа полностью закроется, но окно продолжает висеть и функционировать. Просьба исправить код или подсказать какие-либо функции для этого

include \masm64\include64\masm64rt.inc

.data
    buff dd 0
    programname db "c:\windows\system32\calc.exe",0
    titl db 'Level 0',0
    frmt db 'My ProcID = %i (decimal)',0
    startInfo dd ?
    processInfo PROCESS_INFORMATION <> ; информация о процессе и его первичной нити
    hwnd dq 0 ; Дескриптор окна
    procHandle dd 0 ; Дескриптор процесса

.code
entry_point proc
    ; Создаем процесс calc.exe
    invoke CreateProcess, ADDR programname, 0, 0, 0, FALSE, \
        NORMAL_PRIORITY_CLASS, 0, 0, ADDR startInfo, ADDR processInfo
    
    invoke Sleep, 10000

    ; Открываем дескриптор процесса для завершения
    invoke OpenProcess, PROCESS_TERMINATE, 0, processInfo.dwProcessId
    mov procHandle, eax ; Сохраняем дескриптор процесса в переменной procHandle

    invoke CloseHandle, procHandle
    ; Завершаем процесс calc.exe
    invoke TerminateProcess, procHandle, 0

    invoke wsprintf, addr buff, addr frmt, procHandle
    invoke MessageBox, 0, addr buff, addr titl, MB_ICONINFORMATION+180000h

    process_failed:
    invoke ExitProcess, 0

entry_point endp
end

Ответы (1 шт):

Автор решения: user7860670
  1. Не проверяете результаты вызовов.
  2. Зачем-то пытаетесь получить дескриптор, переоткрывая процесс, хотя у вас по идее уже есть нужный дескриптор сразу после создания.
  3. Не закрываете открытых дескрипторов.
  4. В современных windows calc.exe является приложением-заглушной, стартующим UWP приложение калькулятор.
→ Ссылка