Сообщение перехватываем, но
Стоит задача: программе нужно узнать, была ли нажата какая - нибуть клавиша (не обязательно на активном окне данной программы ).
Что я делаю:
функцию перехвата пишу в dll:
//==============================
HHOOK SysHook;
BOOL WasKeyDown = FALSE;
LRESULT CALLBACK SysMsgProc(
int code, // hook code (код ловушки)
WPARAM wParam, // removal flag (флаг)
LPARAM lParam // address of structure with message
// (адрес структуры с сообщением)
)
{
//Проверяю сообщение
if (code == HC_ACTION)
{
//Проверяю тип сообщения.
//Если была нажата левая кнопка мыши
if (((tagMSG*)lParam)->message == WM_KEYUP)
{
//Клавиша была нажата
WasKeyDown = TRUE;
Beep(1000,300); //Для отладки
}
}
//Передать сообщение другим ловушкам в системе
return CallNextHookEx(SysHook, code, wParam, lParam);
}
///////////////////////////////////////////////////////////////////
exportdll void RunStopHook(bool State)
{
if (State)
{
SysHook = SetWindowsHookEx(WH_GETMESSAGE, &SysMsgProc, theApp.m_hInstance , 0);
}
else
UnhookWindowsHookEx(SysHook);
}
///////////////////////////////////////////////////////////////////
exportdll BOOL ReturnWasKeyDown()
{
return WasKeyDown;
}
///////////////////////////////////////////////////////////////////
exportdll void ResetKeyDown()
{
WasKeyDown = FALSE;
}
//===========================
Функция ReturnWasKeyDown возвращает результат, а ResetKeyDown обнуляет статус что была нажата клавиша.
Так проблема в том, что когда клацать клавишами на окне проги которая вызывает эту dll то все работает, но когда клацать на других окнах то функция перехвата выполняется (пикает – выполняется функция Beep) а переменной WasKeyDown не присваивается значение TRUE (оно то присваивается, но только не для процесса моей проги, а для того процесса, где клацали клавишами).
Как мне зделать так, чтобы переменной WasKeyDown присваивалось значение в моем процессе. Пробовал через указатели, отдельный класс создавал – не помогает.:rolleyes:
Поищи здесь по форумам,здесь куча примеров про секции в длл и interprocess communications должны быть.