![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
вообщем бывают случаи когда юзеры вырубают камп при помощи reset пк, соответсвенно программа не может правильно сохранить настройки даже в случае отлова выключение компьютера... реально ли отловить reset ? теоретически ведь когда зажимаешь клавишу выключения пк, комп вырубатся не сразу а через пару секунд, может какие-то сообщения посылаются в этом случае...
|
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: нет Всего: 19 |
Не правильно отписали заголовок темы. В данном случае отрабатывается процедура выключения компьютера, просто прерывание приходит от железа а не програмно когда пуск->выключить. Если так то вы можете попробовать отловить это сообщение, но остановить его вряд ли сможете, инициировать можете есть такая вещь кажись shutdown или power off(я не помню название, но помню что это стандартные WinAPI и поисковиком найдёте как их юзать) Нажатие кнопки reset вы не отловите, потому что это полностью аппаратная вещь и с этим вы сделать ничего не сможете, а вот вызвать критическую ошибку чтобы получить синий экран с ребутом это запросто. -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
то есть в рамках программирования под windows (WinApi и другие api уровнем ниже из ntdll ) это отловить нереально ?
|
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: нет Всего: 19 |
нажатие кнопки reset на панели компьютера не создавая ничего аппаратного нельзя -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: нет Всего: 19 |
Единственное что вы можете сделать это олов некорректного заверщения работы вашей программы, путём создавания какого-либо временного файла или установки некоторого параметра в файле настроек, который будет устанавливаться при запуске программы и сниматься при корректном завершении, в случае некорректного завершения файл или параметр остаются и вы сможете предпринять какие-либо действия скажем по восстановлению потеряных данных.
P.S. мысль пришла около двух утра -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." |
|||
|
||||
| icecrashldr |
|
|||
![]() Developer ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 5.7.2010 Репутация: нет Всего: нет |
Reset = Апаратное прирывание, отловить нельзя.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Неплохо сохранять настройки каждый раз при их изменении. Если данных действительно много (больше 1 Мб) и изменяются часто (чаще чем раз в 1-2с), то можно завести таймер и сохранять с определенным интервалом. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| OlegSK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
Если проблема возникает из-за того, что кто-то из юзверей ПЕРЕЗАГРУЖАЕТ комп кнопкой Reset, то возможно имеет смысл отключить эту кнопку от мат. платы в их компах. Если речь все же идет именно о выключении компа с помощью короткого нажатия кнопки Power (а не Reset), то событие такого выключения можно отловить в программе и сохранить необходимые данные; копать нужно в сторону сообщения WM_QUERYENDSESSION, которое, если меня не подводит память, рассылается всем открытым приложениям при корректном выключении компа. Если из обработчика этого сообщения вернуть нулевое значение, то выключение компа будет продолжено, а если вернуть единицу то выключение компа будет прервано (правда при этом некоторые приложения будут уже закрыты).
Добавлено через 3 минуты и 3 секунды Кстати, если кто-то из юзверей может выключить комп с помощью продолжительного нажатия на кнопку Power (которое нельзя обработать программно), то возможно имеет смысл и ее отключить от мат. платы и организовать вкл./выкл. с клавиатуры компа. |
|||
|
||||
| OlegSK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
Также, если меня память не подводит, стоит копать в сторону сообщения: WM_POWERBROADCAST -> BT_APMQUERYSUSPEND.
|
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
всем оконным приложениям, хм тут впринцте можно посмотреть http://msdn.microsoft.com/en-us/library/aa373247(VS.85).aspx нужно попробывать |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Ничего не придет, придет если только рубануть питание на компе.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| OlegSK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
Dem_max
Ага, если рубануть питание, то прейдет северный пушной зверек к несохраненным данным... AFAIK все как раз наоборот; - если нажать кнопку Reset, или просто обесточить комп, то никаких сообщений программе не прейдет; собственно, по этому такое выключение является не корректным, и может привести к повреждению данных... С другой стороны, при корректном выключении компа, инициированном через меню Пуск или кратковременным нажатием кнопки Power (на компах, поддерживающих ATX, а их сейчас подавляющее большинство), всем работающим приложениям (по крайней мере, - оконным) рассылаются соответствующие сообщения. Можно даже провести элементарный эксперимент: запустите WordPad и наберите в нем некоторый текст, затем, не сохраняя этот текст, инициируйте корректное выключение компа. Будьте уверены, что WordPad получит соответствующее сообщение от ОС и поинтересуется у вас: хотите ли вы сохранить набранный текст? Кстати, если в ответ на этот запрос нажать отмену, то выключение компа будет прервано. Вот элементарная демонстрация возможностей, которые имеют программы обрабатывающие эти сообщения... З.Ы: Я говорю о приложениях работающих под Windows (как минимум начиная с WinXP). За другие ОС говорить не могу, т.к. не в курсе... Это сообщение отредактировал(а) OlegSK - 19.7.2010, 06:01 |
|||
|
||||
| OlegSK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.7.2010 Репутация: нет Всего: нет |
Похоже что консольные программы тоже могут получать сообщения о корректном выключении компа. Вот код-демка:
З.Ы: Сам его не проверял... Это сообщение отредактировал(а) OlegSK - 22.7.2010, 08:36 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |