Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
46 / 43 / 4
Регистрация: 29.03.2010
Сообщений: 233
1

Хук работает, пока работает приложение, которое его вызвало

04.03.2012, 15:44. Показов 1146. Ответов 5
Метки нет (Все метки)

Набросал код, который устанавливает глобальный хук (пусть на нажатие клавиши), процедура для хука расположена в dll, выглядит примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#pragma data_seg("SHARED")
HHOOK hook;
#pragma data_seg()
#pragma comment(linker, "/SECTION:SHARED,RWS")
 
HINSTANCE instance;
 
LRESULT CALLBACK WndHook(int code,WPARAM wParam,LPARAM lParam) {
        //some code
    return CallNextHookEx(hook, code, wParam, lParam);
}
 
extern "C" __declspec(dllexport) void installHook() {
    hook = SetWindowsHookEx(WH_KEYBOARD,WndHook, instance, 0);
    if(hook!=0){
        //error
    }
}
 
extern "C" __declspec(dllexport) BOOL APIENTRY DllMain( HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
    )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        instance=hModule;
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
Из другого приложения все это вызываю
C++
1
2
3
4
5
6
7
HINSTANCE library = LoadLibraryW(L"ISeeYouHook.dll"); 
if (library == NULL)
{
    return 1;
}
InstallHook install = (InstallHook) GetProcAddress(library, "installHook");
install();
Проблема в том, что хук почему-то живет, пока живет приложение, которое его вызвало и я никак не пойму, почему так происходит - может кто сказать, где я ошибся?
0
Заказывайте контрольные, курсовые и дипломы здесь.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2012, 15:44
Ответы с готовыми решениями:

Вызов DLL. Библиотека не удаляется, пока работает приложение
Здравствуйте. Такой вопрос. Вызываю функцию из DLL при помощи класса Assembly, вызов корректный,...

Приложение, которое работает с bmp Файлом
Пожалуйста помогите!!! Нужно написать программу, которая читает с диска *.bmp файл и выводит его в...

Приложение, которое работает как прокси-сервер http
Написать приложение, которое работает как прокси-сервер http. Должна быть возможность удаленного...

Приложение работает в Debug, странно работает в Release и не работает при билде
Действия выполняются на эмуляторе Pixel 2. Android 9.0. Если я запускаю приложение с конфигурацией...

5
73 / 53 / 12
Регистрация: 20.02.2012
Сообщений: 239
05.03.2012, 18:16 2
erthalion, разве не так должно быть, вы загружаете из приложения библиотеку DLL, вызываете функцию и закрываете приложение, а после закрытия приложения, все ресурсы и загруженные им библиотеки освобождаются.
0
46 / 43 / 4
Регистрация: 29.03.2010
Сообщений: 233
06.03.2012, 13:31  [ТС] 3
Да, я уже сам уловил это) Изначально почему-то в голове у меня застряло, что раз хук глобальный, то и жуть он должен долго и счастливо, пока не вызову Unhook --- хотя это, естественно, не так
0
73 / 53 / 12
Регистрация: 20.02.2012
Сообщений: 239
06.03.2012, 17:32 4
erthalion, а почему бы тогда не сделать программку, которая висит в памяти, и в начале ставит крюк не из библиотеки, а из себя любимой
0
46 / 43 / 4
Регистрация: 29.03.2010
Сообщений: 233
06.03.2012, 21:50  [ТС] 5
Был такой вариант, но мне показалось, что функционально он ничем не отличается от указанного мной подхода. Плюс в идеале надо вызывать CallNextHook, в параметры которого надо передать собственно хук - и сходу я не придумал способа, как это делать, если SetWindowHook будет вызываться из программы, а CallNextHook - из библиотеки. Если есть решения - буду рад послушать)
0
73 / 53 / 12
Регистрация: 20.02.2012
Сообщений: 239
06.03.2012, 21:53 6
erthalion, а почему бы все функции из библиотеки не вставить просто в программу, или зациклить программу, которая запускает библиотеку.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2012, 21:53

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Граф. приложение+библиотеки+консольное приложение! Не работает программа без использования консоли. Если использую, то всё прекрасно работает.
Ребята нужна помощь,все вроде сделал, но приложение начинает зависать при запуске без использования...

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

Написать приложение (с использованием семафора), которое не дает закрыть любой exe файл, пока запущено
Написать приложение с использованием семафора, которое пока запущено не дает закрыть exe файл(...

Передать значение в свойство окна, которое вызвало данное окно?
Передать значение в свойство окна, которое вызвало данное окно? Я вызываю форму следующем образом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.