я зацепил WM_SETFOCUS сообщения, вызвав APIПосле подключения подключаемой процедуры называется бесконечно
hhookCallWndProc = SetWindowsHookEx(WH_CALLWNDPROC, HookCallWndProc, hInst, threadID);
Процедуру Крюка
extern "C" LRESULT _declspec(dllexport) __stdcall CALLBACK HookCallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION) {
CWPSTRUCT* info = (CWPSTRUCT*) lParam;
if(info->message == WM_SETFOCUS)
{
if(info->hwnd == hControl)
{
MessageBox(NULL,L"Focus on control",L"Focus",MB_OK);
}
}
}
return CallNextHookEx(hhookCallWndProc , nCode, wParam, lParam);
}
Теперь, когда я сосредотачиваюсь на контроле, эта процедуру Крюка вызывалась. Отображается MessageBox. Но как только я нажимаю «ОК», появляется другое сообщение.
Сообщения продолжают появляться бесконечно. Я хочу получать сообщения только один раз, когда я сосредотачиваюсь на контроле, но здесь я получаю сообщения бесконечно.
Все, что я делаю неправильно.
Да, похоже, окно сообщения вызывает проблему. Я удалил окно сообщения и напечатал заявление об отладке, и моя процедура крючка называлась 4,5 раза, пока клавиатура не была сфокусирована на контроле. – anand