![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Если нужно сделать хук без формы, нужно всеравно создавать цикл сообщений т.е. примерно так?
Или надо еще какнибудь? |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
для *_LL -хуков цикл обработки сообщение нужен. TranslateMessage можно убрать.
if hKeyHook = 0 then PostQuitMessage(GetLastError) ну это слишком Может даже не начинать цикл если не вышло, а? -------------------- Обижено школьников: 8 |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
если возникнут проблемы с этим кодом попробуй перед SetWindowsHookEx заранее создать себе очередь сообщений (например "безобидным" вызовом PeekMessage)
-------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Т.е. я как понял вот так?
|
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
А еще такой вопрос, такую программу ИМХО можно отключить только в диспетчере задачь или какой-нибудь функцией завершения потока или сама она выключится по завершению работы Windows, а вопрос в том, то что будет ли в таком случае UnhookWindowsHookEx(hKeyHook); срабатывать после цикла сообщений? Мне кажется что нет... Если нет то как правильно снимать хук? Может в полях initialization создавать хук в а finalization убивать? Или еще как-то???
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
хук принадлежит потоку и автоматически уничтожается при завершении потока (не процесса)
Добавлено @ 15:07 тогда в числе процих шлется WM_QUIT -------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
1). WM-сообщения они же оконные, разве будут они слаться в данном случае, когда нету в приложении окна?
2). Если все же будут слаться, т.е. WM_QUIT как его обрабатывать? В цикле придется? Т.е. так?
Если не так поправьте меня пожалуйста.. |
|||
|
||||
| bems |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
когда GetMessage находит в очереди єто сообщение рна возвращает false. Цикл обработки сообщений прекращается
Вот тут уже есть реакция на WM_QUIT -------------------- Обижено школьников: 8 |
||||
|
|||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Т.е. так?
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
ага
-------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Сделал "сохранение данных" после такого цикла, в файле сохраняю, не сохраняются, по завершению программы(выключал из диспетчера задачь и windows выключал с работающей программой).. Ну не сохраняются они...(((
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
не шлется, я соврал
И не потому что нет окна, а потому что вместо него предполагается реакция приложения на WM_ENDSESSION, а оно шлется окнам Если ты не хочешь создавать свое окно, то поставь еще один хук (WH_CALLWNDPROC) и лови это сообщение, когда идет другим окнам. Есть еще вариант написать WinLogon notification package, но это из пушки по воробьям Добавлено @ 06:37 А если пишешь кейлогер, то вообще лучше сохранять данные на лету, потому что от вырубания через таскманагер тебя ни что не спасет -------------------- Обижено школьников: 8 |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Если ты не хочешь создавать свое окно, то поставь еще один хук (WH_CALLWNDPROC) и лови это сообщение, когда идет другим окнам.
Какое сообщение WM_QUIT или WM_ENDSESSION? WM_ENDSESSION при выключении компьютера, скорей всего его и надо ловить хуком.. Но у меня тогда такой вопрос, цикл тогда никогда не заканчивается по сути, если WM_QUIT не шлется? А вот как быть если мою такую программу хотят выключить через диспетчер задачь? Можно ли это какнибудь отлавливать? |
|||
|
||||
| bems |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
WM_ENDSESSION
-------------------- Обижено школьников: 8 |
||||
|
|||||
| Dmitry_177 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
У меня тогда еще несколько вопросов, надеюсь что последние:
1. Если цикл никогда не заканчивается и т.д., вот так нормально будет оставить или лучше как-то еще его написать?
2. Правильно ли будет так обрабатывать хук на WM_ENDSESSION?
3. Если делать перехват АПИ, на какую(ие) лучше функцию(ии) ставить перехват, которая(ые) может/могут вырубить мою программу? |
||||
|
|||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |