Я пытаюсь написать основной кейлоггер на C ++, и до сих пор мне удалось установить низкий рычаг клавиатуры с помощью Win API. Он уведомляет меня каждый раз, когда нажимается клавиша.
Я хотел бы сделать что-то подобное, чтобы уведомлять меня каждый раз, когда фокус меняется на другое окно, поэтому я знаю, в какое окно печатает пользователь.
Я попытался установить хук HW_CBT, но он не дает мне никаких уведомлений.
Каков наилучший способ сделать это?
РЕДАКТИРОВАТЬ:
Я изменил этот код:
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) {
cout<<"event";
return CallNextHookEx(0, nCode, wParam, lParam);
}
а также SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, NULL, NULL);
У меня также есть это в моей программе:
while(true)
GetMessage(&msg,0,WM_KEYFIRST, WM_KEYLAST);
Я все еще не получаю никаких уведомлений при запуске программы, кроме тех, которые касаются нажатий клавиш.
РЕДАКТИРОВАТЬ 2!
Я сделал это с помощью GetWindowText()
, GetForegroundWindow()
и таймер. Не совсем то, что я искал, но это подойдет.
Я просто приму первый ответ …
Может быть, это может быть полезно для вас? SetWindowsHookEx
Устанавливает подключаемую процедуру, которая отслеживает сообщения, прежде чем система отправит их в оконную процедуру назначения
Попробуйте использовать хук WH_CALLWNDPROC или WH_CALLWNDPROCRET, чтобы получать сообщения WM_ACTIVATE (уведомления как для активации, так и для деактивации окна), отправленные на ваш хук до или после того, как они были отправлены в оконную процедуру фактического окна.