Как завершить процесс и закрыть диалоговое окно программы
Пишу программу на 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
→ Ссылка
- Не проверяете результаты вызовов.
- Зачем-то пытаетесь получить дескриптор, переоткрывая процесс, хотя у вас по идее уже есть нужный дескриптор сразу после создания.
- Не закрываете открытых дескрипторов.
- В современных windows calc.exe является приложением-заглушной, стартующим UWP приложение калькулятор.