Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 932
от 10.12.2007, 23:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 475, Экспертов: 57
В номере:Вопросов: 1, Ответов: 1


Вопрос № 112528: Я не достаточно умна,пожалуйста,подскажите,как в С++ прописать прогу,чтоб через 2 часа радоты приложения ,она завершала его и на ближайшие пять часов блокировала.Очень нужно..плиз хелп...

Вопрос № 112.528
Я не достаточно умна,пожалуйста,подскажите,как в С++ прописать прогу,чтоб через 2 часа радоты приложения ,она завершала его и на ближайшие пять часов блокировала.Очень нужно..плиз хелп
Отправлен: 05.12.2007, 22:10
Вопрос задала: Танюша (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Aristos
Здравствуйте, Танюша!

Предлагаемый мною способ основан на методах, называемым внедрением dll. Основан на информации из книги Дж. Рихтера "Создание эффективных WIN32-приложений". По ссылке соответствующая глава в электронном виде.
http://rosigma.com/96.aspx

Кратко о решении.
Решение состоит их 2х частей - программы и библиотеки dll.
Сначало необходимо получить идентификатор интересующего процесса. Его можно посмотреть, например, в Task Manager, попробовать найти процесс по окну и т.д. Программа подобно менеджеру приложений выводит список процессов, и ждет ввода id.

Записываем в реестр (можно было бы, например, в файл записывать) данные для dll - имя процесса и времена ожидания и блокировки.

Затем необходимо выполнить действия от имени интересующего процесса. Для этого было бы хорошо заставить процесс загрузить нашу dll. В windows можно запустить поток в адресном пространстве другого процесса, с помощью функции CreateRemoteThread.

Формат функции потока совпадает с форматом функции LoadLibrary (кроме типа аргемента, но это не важно, посколько используется указатель). Этим мы и воспользуемся.

Кроме того необходимо расположить данные в памяти процесса (у каждого процесса память своя). Это делается с помощью функций VirtualAllocEx и WriteProcessMemory. В выделенную память копируем путь до dll.

Затем запускам в удаленном процессе поток, фактически вызывая от имени процесса LoadLibrary().

Таким способом можно загрузить dll в уже работающий процесс. Загрузить dll в создаваемый процесс (приложение) можно, записав его в реесте по следующему ключу
HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Windows AppInit_DLLs

Плохо, что загружаться такая dll будет во все приложения с графическим интерфейсом :) Поэтому необходима поверка что мы было загружено искомое приложение.

Теперь про dll.
При загрузке dll вызывается функция DllMain - аналог main для обычных приложений. Из неё мы проверяем имя процесса и время.
Если мы ожидаем процесс, то запускаем поток, который будет ждать необходимое время, а потом вызовет exit(0) и завершит процесс.
Если время блокировки, то сразу вызываем exit(0).

Метод работает с перезагрузкой приложения (пока ждем завершения, будем ждать в пределах таймаута) и перезагрузкой компьютера.

Приложение:

---------
нет ничего невозможного

Ответ отправил: Aristos (статус: 8-ой класс)
Ответ отправлен: 07.12.2007, 17:37
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.65 от 04.12.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное