S
stribogaaa
У меня есть два проекта, один Dll библиотека, второй исполняемый файл
Примерная схема библиотеки:
Содержание исполняемого файла:
Дак вот, почему не удается установить хук??
И если у меня нету в исполняемом файле нет главного окна, то будет ли WH_KEYBOARD обрабатывать нажатия клавиатуры? Может нужно использовать WH_KEYBOARD_LL ?
WH_CBT Вообще не происходит....Почему?
Возможно WH_CBT и WH_KEYBOARD должны быть описаны в исполняемом файле?? (я о функция соотвецтвующих хукам)
У меня KeyboardProc CBTProc описаны в самой библиотеке, это правильно?
Если я хочу перехватывать допустим все события клавиатуры, будет ли мне их выдавать WH_KEYBOARD ?? или необходимо использовать WH_KEYBOARD_LL ??
Примерная схема библиотеки:
Код:
//------------------------------------------
#pragma data_seg(".hdata") // секция в памяти общая для всех процессов
HINSTANCE hi=NULL;
#pragma data_seg() // конец секции
#pragma comment(linker, "/section:.hdata,rws")
HHOOK hKeyHook=NULL;
HHOOK hCBTHook=NULL;
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if (nCode) return CallNextHookEx(hKeyHook,nCode,wParam,lParam);
if(lParam>=0) DoNextAction(lParam);
return CallNextHookEx(hKeyHook,nCode,wParam,lParam);
}
LRESULT WINAPI CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode==HCBT_ACTIVATE) // вызывается перед тем как система собирается активировать какоето окно или открыть новое
DoNextAction2((HWND)wParam);
return CallNextHookEx(hCBTHook, nCode, wParam, lParam);
}
extern "C" __declspec (dllexport) BOOL SetKeyboardHook(void)
{
hCBTHook=SetWindowsHookEx(WH_CBT ,CBTProc, hi, 0);
hKeyHook=SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, hi, 0);
return hKeyHook;
}
//------------------------------
Содержание исполняемого файла:
Код:
//------------------------------
extern "C" __declspec (dllimport) BOOL SetKeyboardHook(void); // функция импортируемая из DLL
//----- функция вызова
if(!SetKeyboardHook()) // устанавливаем хуки
return 1; // не получилось закрываемся
//--------
Дак вот, почему не удается установить хук??
И если у меня нету в исполняемом файле нет главного окна, то будет ли WH_KEYBOARD обрабатывать нажатия клавиатуры? Может нужно использовать WH_KEYBOARD_LL ?
WH_CBT Вообще не происходит....Почему?
Возможно WH_CBT и WH_KEYBOARD должны быть описаны в исполняемом файле?? (я о функция соотвецтвующих хукам)
У меня KeyboardProc CBTProc описаны в самой библиотеке, это правильно?
Если я хочу перехватывать допустим все события клавиатуры, будет ли мне их выдавать WH_KEYBOARD ?? или необходимо использовать WH_KEYBOARD_LL ??