В основном, что название говорит, что мне нужно определить, когда моя программа заканчивается, как когда кто-то нажимает на конечную задачу в диспетчере задач или что-то в этом роде. Может ли кто-нибудь указать мне на какое-то событие, которое обрабатывает это с помощью примера или чего-то еще? Спасибо за любую помощь, предоставленнуюКак определить, закончилось ли мое приложение Windows?
ответ
Вам нужно открыть этот процесс. Таким образом вы получите его ручку. После этого вы можете просто ждать этого дескриптора.
HANDLE h = OpenProcess(....);
WaitForSingleObject(h);
Ручки процессов и потоков во многих отношениях выглядят как ручки событий Windows. Как только этот процесс или поток заканчивается, они получают сигнал.
Ответчик запускает код в процессе, который завершается. Так что это не поможет. –
Прежде всего это неясно из OP. Во-вторых, как только процесс уже завершен, должна быть информация где-то, с которой она когда-либо начиналась. AFAIK Windows не сохраняет эту запись, по крайней мере, по умолчанию. –
Если вопрос неясен, вы должны оставить комментарий с разъяснением. – IInspectable
Это зависит от того, как ваше приложение прекращено и какое приложение оно есть.
Для приложений с пользовательским интерфейсом:
- Если пользователь нажимает кнопку «Завершить задачу» в диспетчере задач, вы на самом деле получить WM_DESTROY и даже WM_CLOSE сообщения обработчика сообщений.
- Если пользователь просто нажимает кнопку X вашего приложения, очевидно, что это также относится.
- Если пользователь выходит из системы или выключает компьютер, вы получите сообщения WM_QUERYENDSESSION и WM_ENDSESSION.
Для консольных приложений вы можете использовать функцию SetConsoleCtrlHandler для получения уведомления о большинстве случаев завершения приложения (у меня нет опыта с этим, поэтому я не могу дать много деталей).
Для служб вы можете использовать функцию RegisterServiceCtrlHandler почти так же.
Для всех типов приложений, если приложение завершается принудительно другим процессом с помощью функции TerminateProcess, there is no way to get notified:
Если процесс завершается TerminateProcess, все потоки процесса не немедленно прекращается без какой возможность запуска дополнительного кода. Это означает, что поток не выполняет код в блоках обработчика завершения. Кроме того, никакие прикрепленные DLL не уведомлены о том, что процесс отделяется.
- 1. Как определить, закончилось ли SessionState?
- 2. Как определить, отключено ли мое приложение?
- 3. Как определить, убил ли iOS мое приложение
- 4. Как определить, было ли мое приложение удалено?
- 5. Как определить, покупает ли пользователь мое приложение?
- 6. Когда закончилось мое многократное AFJSONRequestOperations?
- 7. Как определить, закончилось ли копирование папки C#
- 8. Лучший способ определить, обновлено ли мое приложение.
- 9. IOS Как определить, когда закончилось воспроизведение видеоролика
- 10. Как определить, выключено ли приложение Windows?
- 11. Определить, когда закончилось определенное изображение
- 12. Как определить, кто запускает мое приложение?
- 13. Как определить, когда работает мое приложение?
- 14. Как определить, работает ли мое программное обеспечение в Windows XP?
- 15. Как определить, работает ли мое приложение на Heroku?
- 16. Как определить, будет ли мое веб-приложение обрабатывать ожидаемый трафик?
- 17. Как определить, работает ли мое приложение на виртуальной машине?
- 18. Как определить, установлено ли мое приложение по умолчанию пользователем?
- 19. Как определить файл, который запустил мое приложение
- 20. Как определить мое приложение OpenUI5 графическим редактором
- 21. Android - как определить, что разрушает мое приложение?
- 22. Как инициатор может определить, что сопротивление закончилось?
- 23. Как проверить, является ли мое приложение формой активации Windows
- 24. Как Windows (в частности, Vista) определяет, зависает ли мое приложение?
- 25. Как было запущено мое приложение?
- 26. Как зарегистрировать мое приложение в реестре Windows?
- 27. Как я могу определить, что требует мое мобильное приложение?
- 28. Как проверить, оценил ли пользователь мое приложение
- 29. Как я могу определить, почему мое приложение ASP.NET перерабатывается
- 30. Как я могу определить, когда мое приложение сведено к минимуму?
Как вы начинаете программу? И, пожалуйста, дайте нам больше информации о том, что именно вы пытаетесь достичь. –
Какой процесс должен получить эту информацию? Процесс, который должен завершиться, или внешний процесс? – IInspectable
Это было задано много раз. Вы проводили какие-либо исследования? –