Неограниченный диапазон глобального хука Windows API

Я пытаюсь создать приложение на C ++, которое обрабатывает события клавиатуры (на самом деле, просто хочу «перехватить» некоторые фразы пользовательских типов) в каждом приложении, работающем на ПК. Самая основа того, что я пытаюсь сделать, такова:

#define _WIN32_WINNT 0x0500

#include <iostream>
#include <windows.h>
using namespace std;

HHOOK hHook;

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
printf("Activated\n");
return CallNextHookEx(hHook, nCode, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInstance, 0);
MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}

Теперь это глобально, но я застрял, когда обнаружил, что он не «слышит» мой ввод с клавиатуры, когда я запускаю определенное приложение. Из того, что я обнаружил, проблема заключается в том, что нужное приложение не принадлежит тому же рабочему столу, что и мое приложение (поскольку эта функция обратного вызова является глобальной для рабочего стола моего приложения). Я пытался реализовать некоторые трюки по переключению рабочего стола, но я действительно не знаком с Windows API, и все мои усилия вскоре потерпели неудачу. Реферала MSDN недостаточно для обучения. Можно ли как-нибудь сделать так, чтобы мое приложение могло ловить ввод с клавиатуры ВЕЗДЕ на моем компьютере?

Заранее спасибо за любую помощь / советы!

2

Решение

Глобальный хук должен быть реализован в DLL, чтобы он мог подключаться к нескольким процессам. И вы должны реализовать отдельные 32-битные и 64-битные версии, если вы хотите поддерживать 64-битные системы. Документация для SetWindowsHookEx() говорит так же.

Вместо того, чтобы использовать глобальный хук, попробуйте использовать Сырой ввод вместо. использование RegisterRawInputDevices() зарегистрировать интерес в клавиатуре, а затем обрабатывать WM_INPUT сообщения для нажатия клавиш.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]