Я хочу использовать SetWindowsHookEx (), чтобы нажать клавишу пользователя и щелкнуть мышью.
И я определил глобальный хук клавиатуры / мыши и установил его с помощью SetWindowsHookEx.
Хуки работают практически на приложениях, но не могут работать на конкретных приложениях (например, Cain & Абель).
Когда я первый раз нажал на Каина & Абель, я могу получить информацию о клике. Тогда это не может работать, пока я не нажму другое приложение или консоль.
Вот часть моего кода:
#include <QtCore/QCoreApplication>
#include <QtDebug>
#include <QTime>
#include <QChar>
#include <iostream>
#include <Windows.h>
#pragma comment(lib, "user32.lib")
HHOOK hHook = NULL;
HHOOK hMouseHook = NULL;
Главный:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
HINSTANCE hInstance = GetModuleHandle(NULL);
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, MyLowerLevelKeyBoardProc, NULL, 0);
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, MyLowerLevelMouseProc, hInstance, 0);
MSG message;
while (GetMessage(&message,NULL,0,0)) {
TranslateMessage( &message );
DispatchMessage( &message );
}
UnhookWindowsHookEx(hHook);
UnhookWindowsHookEx(hMouseHook);if (hHook == NULL || hMouseHook == NULL)
{
qDebug() << "Hook failed";
}
return a.exec();
}
Функция обратного вызова: MyLowerLevelMouseProc
LRESULT CALLBACK MyLowerLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam){
MOUSEHOOKSTRUCT *pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;
if (pMouseStruct != NULL){
POINT screenpoint;
HWND hwndFoundWindow = NULL;
switch(wParam){
case WM_LBUTTONDOWN:
GetCursorPos (&screenpoint);
hwndFoundWindow = WindowFromPoint (screenpoint);
qDebug() << "1. Mouse click! (Left), x= " << screenpoint.x << ", y= " << screenpoint.y;
qDebug() << "2. hwndFoundWindow=" << hwndFoundWindow
break;
case WM_RBUTTONDOWN:
GetCursorPos (&screenpoint);
hwndFoundWindow = WindowFromPoint (screenpoint);
qDebug() << "Mouse click! (Right)" ;
break;
}
}
return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
}
Если есть идеи и решения, пожалуйста, помогите мне.
Большое спасибо.
Задача ещё не решена.